Bonjour,
Je me permets de faire appel à votre aide concernant un problème récurrent rencontré depuis 2 semaines sur un de mes serveurs dédiés à propos de l’arrêt automatique d’apache et de sa relance .
Tout d’abord mon environnement :
Debian etch Linux 2.6.24.2
Tous les matins vers 6h25 un backup mysql est réalisé sur ce serveur. Pour se faire apache2 est “normalement” arrêté le temps du backup puis relancé.
Jusqu’à il y a 2 semaines tout fonctionner parfaitement mais pour une raison encore non indentifiée, apache ne s’arrête plus totalement puisqu’il reste toujours un process “fantome” qui empêche la relance complète d’apache :
Voici la log du backup qui montre mieux l’erreur :
Stopping web server (apache2)…
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
failed!
En se connectant sur le serveur on voit bien qu’il reste un process :
[root@ds0244:~]#ps -ef|grep apache
www-data 17722 1 0 Apr12 ? 00:10:15 /usr/sbin/apache2 -k start
root 27433 27418 0 09:56 pts/0 00:00:00 grep --color=always apache
Seul moyen de relancer correctement apache (car malgrès la présence de ce process on ne peut plus joindre les sites hébergés sur ce serveur), killer ce processus puis relancer apache.
Le problème étant qu’en attendant de trouver pourquoi apache ne s’arrête pas complètement je dois trouver un moyen de forcer le kill du processus restant actif car pour le moment j’en suis à devoir me lever exprès le matin pour effectuer cette opération.
Pour forcer le kill de ce processus récalcitrant le script suivant (sous le nom “zapache”) a été ajouté dans le cron.daily :
#!/bin/sh
killall -9 apache2
/etc/init.d/apache2 start
Malheureusement force est de constater que ça ne fonctionne pas comme le montre la suite de la log :
/etc/cron.daily/zapache:
apache2: no process killed
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
failed!
run-parts: /etc/cron.daily/zapache exited with return code 1
Mon problème est donc double désormais :
1- Trouver ce qui a pu changer il y a 2 semaines sur le serveur et qui empêche l’arrêt complet d’apache
2- En attendant de régler le point 1 trouver un moyen temporaire de killer complètement apache afin qu’il se relance correctement et que je ne sois pas obligé de me lever tous les matins à 6h30 pour effectuer manuellement cette opération.
On m’a proposé le script suivant pour killer totalement apache :
#!/bin/sh
ps -aux | grep apache > apacheRestart.log # On liste les process apache et on les enregistre dans apacheRestart.log
sed -i ‘2d’ apacheRestart.log # Suppression de la deuxième ligne du “ps” qui correspond au grep.
sed -i ‘s/www-data //g’ apacheRestart.log # Suppression des caractères inutiles
sed -i ‘s/1 0 Apr05 ? 00:10:40 /usr/sbin/apache2 -k start//g’ apacheRestart.log # idem
kill -9 “$(cat apacheRestart.log)” # On kill…
Mais le problème de ce script réside dans l’avant dernière ligne qui repose sur des informations variables chaque jour.
Est-ce qu’il est possible de remplacer éventuellement :
sed -i ‘s/1 0 Apr05 ? 00:10:40 /usr/sbin/apache2 -k start//g’ apacheRestart.log
par
sed -i ‘s/1 0 * * /usr/sbin/apache2 -k start//g’ apacheRestart.log
Alors ça pourrait peut-être le faire mais je ne sais pas si ça sera fonctionnel au final ?
Peut-être avez-vous une idée plus certaine sur la manière d’arrêter totalement apache ou mieux d’identifier ce qui empêche celui-ci de s’arrêter totalement ?
Merci d’avance de votre aide.