Parsing the log files can be pretty tricky. Rather than try to do that, you'd probably be better off using a script such as this one which can run from a crontab entry. This script will attempt to access the server, if it's unsuccessful then it will restart Apache.
Script
Source of script: bash script to restart Apache automatically
#!/bin/sh
# Script that checks whether apache is still up, and if not:
# - e-mail the last bit of log files
# - kick some life back into it
# -- Thomas, 20050606
PATH=/bin:/usr/bin
THEDIR=/tmp/apache-watchdog
[email protected]
mkdir -p $THEDIR
if ( wget --timeout=30 -q -P $THEDIR http://localhost/robots.txt )
then
# we are up
touch ~/.apache-was-up
else
# down! but if it was down already, don't keep spamming
if [[ -f ~/.apache-was-up ]]
then
# write a nice e-mail
echo -n "apache crashed at " > $THEDIR/mail
date >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Access log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2_access/current >> $THEDIR/mail
echo >> $THEDIR/mail
echo "Error log:" >> $THEDIR/mail
tail -n 30 /var/log/apache2_error/current >> $THEDIR/mail
echo >> $THEDIR/mail
# kick apache
echo "Now kicking apache..." >> $THEDIR/mail
/etc/init.d/apache2 stop >> $THEDIR/mail 2>&1
killall -9 apache2 >> $THEDIR/mail 2>&1
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
# send the mail
echo >> $THEDIR/mail
echo "Good luck troubleshooting!" >> $THEDIR/mail
mail -s "apache-watchdog: apache crashed" $EMAIL < $THEDIR/mail
rm ~/.apache-was-up
fi
fi
rm -rf $THEDIR
Paths
The paths to the stop/start scripts will need to be adjusted accordingly based on where your distro has installed Apache. Lines like this one:
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
If you're on CentOS will be like this:
/etc/init.d/httpd start >> $THEDIR/mail 2>&1
Name of Executable
The same goes with the killlall lines. The name of the executable on CentOS is httpd.
The crontab entry
This cron will need to be run as root so that it has the appropriate permissions to stop/start Apache.