Ho riscontrato questo errore su una nuova installazione all'avvio di apache2 Ubuntu 12.10.
È un bug in apache2. Viene appeso in background. Ecco la mia guida dettagliata su dove potrebbero trovarsi i bug nel software.
Ecco l'errore che ho ricevuto:
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]
Indirizzo già in uso? Cosa potrebbe usarlo? Controlla:
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
Ciò significa che apache2 impedisce l'avvio di apache2. Bizzarro. Ciò confermerà:
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
Sì, in questo caso apache2 è in esecuzione, stavo cercando di avviare apache2 una seconda volta sulla stessa porta.
Ciò che mi confonde è che service
segnala che apache2 NON è in esecuzione:
el@titan:~$ sudo service apache2 status
Apache2 is NOT running.
E quando si interroga apache2ctl per il suo stato, si blocca.
root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.
Quindi Ubuntu sembra avere problemi a gestire apache2 all'avvio. Tempo di smettere di apache2:
root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running
Un grande indizio! Si tenta di interrompere apache2 e ha perso l'ID del processo! Quindi Ubuntu non può fermare apache2 perché non sa dove sia!
Penseresti che un riavvio lo riparerebbe, ma non perché Apache2 si avvia all'avvio e si blocca. Il normale processo di avvio per apache2 non funziona correttamente.
Quindi, come ripararlo?
Sono stato in grado di risolvere questo problema analizzando l' ps
output del comando. Si noti che il ps
comando ci dice che quel processo è stato avviato da "/etc/rc2.d/S91apache2 start".
Questo è il programma offensivo che ha bisogno di un calcio rapido.
/etc/rc2.d/S91apache2
è il collegamento simbolico utilizzato per avviare apache2 all'avvio del computer. Per qualche motivo sembra avviare apache2 e quindi si blocca. Quindi dovremo dirgli di non farlo.
Quindi dai un'occhiata a quello /etc/rc2.d/S91apache2
.
el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx 1 root root 17 Nov 7 21:45 S91apache2 -> ../init.d/apache2*
È un collegamento simbolico che non vogliamo che sia lì. Fare questo per impedire l'avvio di apache2 all'avvio:
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
Riavvia il computer per assicurarti che apache2 non si avvii e non si blocchi. Ok bene. Ora POTREBBE riportare apache2 com'era prima, ma ciò farebbe fallire di nuovo.
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
Invece, avvia apache2 in questo modo:
sudo service apache2 start
E l'apache2 esegue il backup e serve nuovamente le pagine. Sembra che ci siano alcuni bug gravi con apache2 / Ubuntu 12.10 che causano l'avvio e il blocco di apache2. Questa è una soluzione alternativa, suppongo che la soluzione sia ottenere le versioni più recenti di apache2 e Ubuntu e sperare per il meglio.