Tôi đã gặp lỗi này khi cài đặt mới khi bắt đầu apache2 Ubuntu 12.10.
Đó là một lỗi trong apache2. Nó được treo trong nền. Đây là hướng dẫn của tôi về nơi các lỗi có thể có trong phần mềm.
Đây là lỗi tôi gặp phải:
el@titan:~$ sudo service apache2 start
* Starting web server apache2
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
[fail]
Địa chỉ đã được sử dụng? Điều gì có thể được sử dụng nó? Kiểm tra xem nó:
el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:# supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf: Listen 443
/etc/apache2/ports.conf: Listen 443
Điều đó có nghĩa là apache2 đang ngăn apache2 bắt đầu. Kỳ quái. Điều này sẽ xác nhận:
el@titan:~$ ps -ef | grep apache2
root 1146 954 0 15:51 ? 00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root 1172 1146 0 15:51 ? 00:00:00 /bin/sh /usr/sbin/apache2ctl start
root 1181 1172 0 15:51 ? 00:00:00 /usr/sbin/apache2 -k start
root 1193 1181 0 15:51 ? 00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el 5439 5326 0 16:23 pts/2 00:00:00 grep --color=auto apache2
Vâng, trong trường hợp này apache2 đang chạy, tôi đã cố gắng bắt đầu apache2 lần thứ hai trên cùng một cổng.
Điều khiến tôi bối rối là service
các báo cáo rằng apache2 KHÔNG chạy:
el@titan:~$ sudo service apache2 status
Apache2 is NOT running.
Và khi bạn truy vấn apache2ctl cho trạng thái của nó, nó sẽ bị treo.
root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.
Vì vậy, Ubuntu dường như gặp khó khăn khi quản lý apache2 khi khởi động. Thời gian ngừng apache2:
root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running
Một manh mối lớn! Bạn cố gắng dừng apache2 và nó bị mất id quá trình! Vì vậy, Ubuntu không thể dừng apache2 vì nó không biết nó ở đâu!
Bạn sẽ nghĩ khởi động lại sẽ sửa nó, nhưng không phải vì apache2 khởi động và bị treo. Quá trình khởi động bình thường cho apache2 không hoạt động đúng.
Vậy làm thế nào để khắc phục nó?
Tôi đã có thể khắc phục điều này bằng cách phân tích ps
đầu ra lệnh. Lưu ý rằng ps
lệnh cho chúng ta biết rằng quá trình đó đã được bắt đầu bằng "/etc/rc2.d/S91apache2 start".
Đó là chương trình vi phạm cần một cú đá nhanh.
/etc/rc2.d/S91apache2
là liên kết tượng trưng được sử dụng để bắt đầu apache2 cho bạn khi máy tính khởi động. Vì một số lý do, nó dường như bắt đầu apache2 và sau đó bị treo. Vì vậy, chúng tôi sẽ phải nói với nó để không làm điều đó.
Vì vậy hãy đi xem đó /etc/rc2.d/S91apache2
.
el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx 1 root root 17 Nov 7 21:45 S91apache2 -> ../init.d/apache2*
Đó là một liên kết tượng trưng mà chúng tôi không muốn nó ở đó. Làm điều này để ngăn apache2 bắt đầu khởi động:
root@titan:~# sudo update-rc.d -f apache2 remove
Removing any system startup links for /etc/init.d/apache2 ...
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2
Khởi động lại máy tính để đảm bảo apache2 không khởi động và treo. Được rồi, tốt lắm. Bây giờ bạn CÓ THỂ đưa apache2 trở lại như cũ, nhưng điều đó sẽ khiến nó thất bại một lần nữa.
root@titan:~$ sudo update-rc.d apache2 defaults //(don't do this)
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K20apache2 -> ../init.d/apache2
/etc/rc1.d/K20apache2 -> ../init.d/apache2
/etc/rc6.d/K20apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
Thay vào đó, hãy bắt đầu apache2 như thế này:
sudo service apache2 start
Và apache2 đã sao lưu và phục vụ các trang một lần nữa. Dường như có một số lỗi nghiêm trọng với apache2 / Ubuntu 12.10 khiến apache2 bắt đầu và treo. Đây là một cách giải quyết, tôi cho rằng cách khắc phục là có được các phiên bản mới hơn của apache2 và Ubuntu và hy vọng điều tốt nhất.