76 votes

Apache ne démarre pas, Adresse déjà utilisée (mais pas vraiment)

J'essaie de configurer une machine virtuelle fonctionnant sous Ubuntu 12.04. J'ai deux hôtes virtuels configurés en utilisant le port 80, mais Apache ne démarre pas.

Je reçois cette erreur :
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

La sortie de netstat -tulpn montre que rien n'utilise le port 80. Quelle pourrait être la cause de ce problème ?

48voto

ravi Points 481

Assurez-vous que vous ne déclarez pas Listen 80 deux fois dans les fichiers .conf.

Par exemple, vous pouvez l'avoir à la fois dans ports.conf et auberge sites-enabled/www.conf .

Pour le savoir, utilisez : grep -ri listen /etc/apache2

Gardez Listen 80 en un seul endroit.

39voto

Anonymous Platypus Points 3370

Je réponds à la manière dont j'ai résolu ce problème. Cela pourrait être utile à quelqu'un à l'avenir.

Essayez netstat -ltnp | grep :80

Cela renverrait quelque chose comme

tcp6 0 0 :::80 :::* LISTEN 1047/apache2

Ensuite, exécutez

sudo kill -9 1047

Où 1047 est le pid du programme s'exécutant sur le port 80. Vous pouvez remplacer le pid que vous avez obtenu à partir de netstat

18voto

Dodger Points 181

J'avais un serveur Nginx qui écoutait sur mon serveur AWS EC2, je pense qu'il a été configuré lorsque j'ai construit l'EC2, d'où l'erreur Address already in use. J'ai donc arrêté le service et démarré le service Apache2 :

sudo service nginx stop
sudo service apache2 start

14voto

Eric Leschinski Points 2093

J'ai obtenu cette erreur lors d'une nouvelle installation en démarrant apache2 Ubuntu 12.10.

C'est un bug dans Apache2. Il se bloque en arrière-plan. Voici mon explication de l'endroit où les bogues peuvent se trouver dans le logiciel.

Voici l'erreur que j'ai obtenue :

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]

Adresse déjà utilisée ? Qui pourrait l'utiliser ? Vérifiez :

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

Cela signifie que apache2 empêche apache2 de démarrer. Bizarre. Ceci va le confirmer :

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

Oui, dans ce cas, apache2 est en cours d'exécution, j'ai essayé de démarrer apache2 une deuxième fois sur le même port.

Ce qui me trouble, c'est que service signale qu'apache2 ne fonctionne PAS :

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

Et quand on demande son état à apache2ctl, il se bloque.

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

Donc Ubuntu semble avoir des problèmes pour gérer apache2 au démarrage. Il est temps d'arrêter apache2 :

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

Un gros indice ! Vous essayez d'arrêter apache2 et il a perdu l'identifiant du processus ! Donc Ubuntu ne peut pas arrêter apache2 car il ne sait pas où il est !

On pourrait penser qu'un redémarrage résoudrait le problème, mais ce n'est pas le cas car apache2 démarre au démarrage et se bloque. Le processus de démarrage normal d'apache2 ne fonctionne pas correctement.

Alors comment le réparer ?

J'ai pu réparer cela en analysant le ps sortie de commande. Notez que le ps nous indique que ce processus a été lancé par "/etc/rc2.d/S91apache2 start".

C'est le programme offensant qui a besoin d'un coup de pied rapide.

/etc/rc2.d/S91apache2 est le lien symbolique utilisé pour démarrer apache2 pour vous lorsque l'ordinateur démarre. Pour une raison quelconque, il semble démarrer apache2 puis se bloquer. Nous devons donc lui dire de ne pas le faire.

Alors, allez jeter un coup d'oeil à ça /etc/rc2.d/S91apache2 .

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

C'est un lien symbolique que nous ne voulons pas qu'il soit là. Faites cela pour empêcher apache2 de démarrer au démarrage :

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

Redémarrez l'ordinateur pour vous assurer qu'Apache2 ne démarre pas et ne se bloque pas. Ok, c'est bon. Maintenant, vous POURRIEZ remettre apache2 comme il était, mais cela le ferait échouer à nouveau.

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

A la place, démarrez l'apache2 comme ceci :

sudo service apache2 start

Et l'apache2 est de nouveau opérationnel et sert des pages à nouveau. Il semble qu'il y ait de sérieux bogues avec apache2/Ubuntu 12.10 qui provoquent le démarrage et le blocage d'apache2. C'est une solution de contournement, je suppose que la solution est d'obtenir des versions plus récentes d'apache2 et d'Ubuntu et d'espérer le meilleur.

13voto

Jack Dorsey Points 1

Lorsque j'ai eu ce problème, il s'est avéré que mon Apache ne pouvait pas démarrer au démarrage parce que j'avais un site SSL qui nécessitait la saisie d'un mot de passe pour le certificat.

Un bon moyen de savoir si c'est le cas pour vous est d'exécuter un ps -ef | grep apache si cela renvoie des processus qui ressemblent à /bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA puis il attend qu'un mot de passe soit saisi dans un terminal que vous ne verrez jamais.

D'abord, j'ai tué le processus suspendu (en envoyant un kill -HUP à l'ID du processus /usr/sbin/apache2 devrait suffire à tuer les autres aussi, mais faites un autre ps -ef | grep apache pour être sûr).

Puis j'ai suivi les instructions dans ce poste pour créer un fichier de mots de passe SSL qui ne nécessite pas la saisie d'un mot de passe. Ensuite, un service apache2 start a bien fonctionné, et Apache a démarré correctement après un redémarrage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X