Ogni tanto può succedere che Apache vada giù senza che noi riusciamo a darne una spiegazione anche dopo aver controllato i log. Questa cosa mi capita spesso su alcune macchine di test e dunque ho cercato un po’ in rete una soluzione veloce, semplice per aggirare il problema. Aggirare perché ovviamente non è la soluzione migliore, ma se siamo su una macchina senza troppe pretese allora può tornare utile.
Lo script che ho utilizzato è quello trovato su Cybercity ed è il seguente.
-
#!/bin/bash
-
# Apache Process Monitor
-
# Restart Apache Web Server When It Goes Down
-
# ————————————————————————-
-
# Copyright (c) 2003 nixCraft project <http://cyberciti.biz/fb/>
-
# This script is licensed under GNU GPL version 2.0 or above
-
# ————————————————————————-
-
# This script is part of nixCraft shell script collection (NSSC)
-
# Visit http://bash.cyberciti.biz/ for more information.
-
# ————————————————————————-
-
# RHEL / CentOS / Fedora Linux restart command
-
RESTART=“/sbin/service httpd restart”
-
# uncomment if you are using Debian / Ubuntu Linux
-
#RESTART=“/etc/init.d/apache2 restart”
-
#path to pgrep command
-
PGREP=“/usr/bin/pgrep”
-
# Httpd daemon name,
-
# Under RHEL/CentOS/Fedora it is httpd
-
# Under Debian 4.x it is apache2
-
HTTPD=“httpd”
-
# find httpd pid
-
$PGREP ${HTTPD}
-
if [ $? -ne 0 ] # if apache not running
-
then
-
# restart apache
-
$RESTART
-
fi
Lo script non fa altro che usare pgrep per controllare che effettivamente ci siano processi Apache/httpd attivi e in caso contrario chiede un riavvio.
Per farlo andare in automatico basta impostare un cronjob ogni X minuti facendo crontab -e e inserendo la seguente linea
*/5 * * * * /path/to/script.sh >/dev/null 2>&1
In questo modo se Apache sarà in stato di inattività verrà riavviato.
Quando il restart non funziona
Ci sono anche casi più complessi dove un semplice ‘restart’ potrebbe non bastare.
In questi casi quello che possiamo fare è seguire la seguente serie di comandi.
Killare tutti i processi Apache e dunque fare
# ipcs -s apache # ipcs -s | grep apache | perl -e 'while () { @a=split(/\s+/);print `ipcrm sem $a[1]`}' # cd /var/lock/subsys # rm apache2 # /etc/init.d/apache2 restart