In letzter Zeit wird mein Blog immer wieder geschlossen centos6.2+apache2.2+mysql5.5+php5.3
. Ich habe es MaxClients
in veröffentlicht httpd.conf
, aber es ist weniger nützlich.
Ist es also möglich, ein Shell-Skript zu schreiben (alle 10 Minuten mit Crontab ausführen), um das zu lesen und httpd/error_log
bei der letzten Nachricht preg_match
sending a SIGTERM
Apache automatisch neu zu starten?
Antwort1
Das Parsen der Protokolldateien kann ziemlich knifflig sein. Anstatt dies zu versuchen, wäre es wahrscheinlich besser, ein Skript wie dieses zu verwenden, das von einem Crontab-Eintrag aus ausgeführt werden kann. Dieses Skript versucht, auf den Server zuzugreifen. Wenn dies nicht gelingt, wird Apache neu gestartet.
Skript
Quelle des Skripts:Bash-Skript zum automatischen Neustarten von Apache
#!/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
Pfade
Die Pfade zu den Stopp-/Startskripten müssen entsprechend angepasst werden, je nachdem, wo Ihre Distribution Apache installiert hat. Zeilen wie diese:
/etc/init.d/apache2 start >> $THEDIR/mail 2>&1
Wenn Sie CentOS verwenden, sieht es folgendermaßen aus:
/etc/init.d/httpd start >> $THEDIR/mail 2>&1
Name der ausführbaren Datei
Dasselbe gilt für die killlall
Zeilen. Der Name der ausführbaren Datei unter CentOS lautet httpd
.
Der Crontab-Eintrag
Dieser Cron muss als Root ausgeführt werden, damit er über die entsprechenden Berechtigungen zum Stoppen/Starten von Apache verfügt.