2 votes

Apache est en cours d'exécution, mais il signale qu'il ne l'est pas et ne redémarre pas.

Apache est en cours d'exécution ; cependant, il signale qu'il ne l'est pas, et il ne redémarre pas.

# /etc/init.d/httpd status
httpd.worker is stopped

# /usr/sbin/lsof -iTCP:80 
COMMAND    PID   USER   FD   TYPE DEVICE SIZE NODE NAME
httpd.wor 1169   root    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1211 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1213 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1215 daemon    3u  IPv6   2974       TCP *:http (LISTEN)
httpd.wor 1352 daemon    3u  IPv6   2974       TCP *:http (LISTEN)

#/etc/init.d/httpd restart
Stopping httpd:                                            [FAILED]
Starting httpd: [Wed Mar 24 10:33:51 2010] [warn] module proxy_ajp_module is already loaded, skipping
(98)Address already in use: make_sock: could not bind to address [::]:80
(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
                                                           [FAILED]

OS : Linux DISTRO : CENTOS 5
Le redémarrage du serveur n'a pas aidé, pas plus que le fait de tuer apache et de le relancer.

Une idée de la cause de cette incohérence ?

0 votes

Avez-vous deux instances d'apache installées ?

2voto

Dan Andreatta Points 5352

Habituellement, le init.d Les scripts utilisent des fichiers pour stocker les PIDs des démons démarrés, e.g. /var/run/httpd.pid ou quelque chose de similaire. Il se peut que le script stocke le mauvais PID, ou un PID périmé, ou qu'il y ait un problème de permission, et que le script ne puisse pas créer le fichier en premier lieu.

1voto

gareth_bowles Points 8717

Je suppose que vous avez un fichier PID périmé provenant d'un précédent lancement d'Apache. Je n'ai pas accès à un système CentOS, mais sur ma machine Fedora 11 ce fichier se trouve dans /var/run/httpd/httpd.pid - vous pouvez vérifier votre emplacement en recherchant "pidfile" dans /etc/init.d/httpd (je suppose que vous utilisez une version d'Apache installée à partir d'un RPM ; si ce n'est pas le cas et que vous avez apache dans /usr/local/apache2 ou similaire, le fichier PID se trouve dans /usr/local/apache2/logs).

Arrêtez Apache, supprimez le fichier PID périmé, puis redémarrez et tout devrait bien se passer.

1voto

Joe H. Points 1887

Le fichier init.d est typiquement juste un Shell Shell -- il appelle probablement apachectl pour démarrer et arrêter le processus. Vérifiez la commande qu'il envoie pour arrêter le processus, et voyez ce qui se passe lorsque vous essayez d'exécuter la commande qu'il utilise directement, sans le fichier init.d.

Si cela ne fonctionne toujours pas, vérifiez les journaux d'erreurs de votre serveur Web, pour voir s'il y a quelque chose d'utile.

Pour le débogage, vous pouvez également essayer d'envoyer en utilisant la commande apachectl graceful Cela rechargera la configuration et redémarrera les processus enfants sans arrêter le processus principal. (le problème est que cela signifie qu'il y a quelques changements de configuration qui ne prendront pas effet, mais à moins que vous ne fassiez du tuning, cela n'aura probablement pas d'importance).

1voto

EtienneT Points 1552

Je suppose que vous avez deux init scripts différents qui démarrent apache, et que les différents init scripts utilisent des fichiers pid différents.

Que se passe-t-il si vous faites killall -9 httpd et ensuite démarrer Apache via /etc/init.d/httpd start ?

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