Het wil nog wel eens voorkomen dat apache crasht of gewoonweg stopt met werken.
Bij mij komt dit doordat Zarafa mijn webservice op de een of andere manier uit zet bij het starten van de Zarafa server.
Om hier een stokje voor te steken heb ik een script geschreven die een bestand probeert te downloaden via de webservice.
Als dat niet lukt herstart het script de webservice en wordt er een mail naar je gestuurd dat de webservice is herstart.
Maak een bestandje aan om er voor te zorgen dat er getest kan worden of de webservice up is:
touch /volume1/web/robots.txt
Het script ziet er als volgt uit:
#!/bin/sh
PATH=/bin:/usr/bin:/opt/bin:/usr/sbin
THEDIR=./apache-watchdog
FROM=apache_wachdog@raptile.nl
TO=watchdog@raptile..nl
SUBJECT="apache-watchdog: apache crashed - $(date)"
mkdir -p $THEDIR
rm -f $THEDIR/mail
rm -f $THEDIR/robots.txt
rm -f ~/.apache-was-up
#Create testfile
echo "" > /volume1/web/robots.txt
if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
# APACHE IS UP
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
# write a nice e-mail
#HEADERS
echo "from: $FROM" > $THEDIR/mail
echo "to:$TO" >> $THEDIR/mail
echo "subject:$SUBJECT" >> $THEDIR/mail
#BODY
echo "apache crashed at:" >> $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Access log:" >> $THEDIR/mail
tail -n 20 /usr/syno/apache/logs/access_log>> $THEDIR/mail
echo >> $THEDIR/mail
echo "Acces log COMBINED:" >> $THEDIR/mail
tail -n 20 /usr/syno/apache/logs/access_log_combined >> $THEDIR/mail
echo >> $THEDIR/mail
echo "SYS ERROR LOG:" >> $THEDIR/mail
tail -n 20 /var/log/httpd-error-sys.log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "USER ERROR LOG:" >> $THEDIR/mail
tail -n 20 /var/log/httpd-error-user.log >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Messages log:" >> $THEDIR/mail
tail -n 20 /var/log/messages >> $THEDIR/mail
echo >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/usr/syno/etc/rc.d/S97apache-sys.sh restart >> $THEDIR/mail 2>&1
/usr/syno/etc/rc.d/S97apache-user.sh restart >> $THEDIR/mail 2>&1
# send the mail
cat $THEDIR/mail << EOF | sendmail -t
EOF
fi
maak het script aan:
vi apache_check.sh
plak bovenstaand script in het apache_check.sh bestand en pas de waarden aan van je mail adres e.d.
Zorg dat de rechten goed staan zodat het script uitgevoerd kan worden:
chmod 755 apache_check.sh
Je kunt het script zo uitvoeren:
./apache_check.sh
Dit script kun je in je crontab plaatsen om er voor te zorgen dat dit script bijvoorbeeld elke minuut een keer wordt uitgevoerd.
Hoe crontab werkt lees je op de site van
wizjosvi /etc/crontab
Mijn crontab entry ziet er zo uit:
*/1 * * * * root /opt/home/apache_check.sh
crontab herstarten zodat de controle gelijk in gaat:
/usr/syno/etc/rc.d/S04crond.sh stop
/usr/syno/etc/rc.d/S04crond.sh start
MOD EDIT(wizjos): twee typo's verbeterd
Edit: Code iets aangepast.
20 regels logfile ipv 30 en stukje code toegevoegd:
rm -f $THEDIR/robots.txt
en
#Create testfile
echo "" > /volume1/web/robots.txt