Я записал сценарий удара для перезапуска Apache, когда он висел, и пошлите электронное письмо администратору. Код показывают ниже. код перезапустит Apache, если количество процесса Apache будет нулем. Проблема: Apache, который некоторое время подвешивает и процессы, все еще не является нулем, таким образом, в этом случае сценарий не перезапустит Apache. Необходимое: как я изменяю код для перезапуска Apache, если он висел, и процессы не нуль.
#!/bin/bash
if [ `pgrep apache2 -c` -le "0" ]; then
/etc/init.d/apache2 stop
pkill -u www-data
/etc/init.d/apache2 start
echo "restarting....."
SUBJECT="Apache auto restart"
# Email To ?
EMAIL="me@mydomain.com"
# Email text/message
EMAILMESSAGE="apache auto restart done"
# send an email using /bin/mail
/bin/mail -s "$SUBJECT" "$EMAIL" "$EMAILMESSAGE"
fi
Чтобы выровнять текст вправо, можно определить ширину отображаемого текста, а затем вычесть ее из координаты X. например:
g.drawString(s, rightEdge - fontMetrics.stringWidth(s), y);
-121--3787363- Ответ Кевина верен для версий 2.5.4 и старше. В текущем багажнике StrucureMap (и когда 2.5.5 + освобождается) теперь можно сделать:
Scan(scanner =>
{
scanner.AssemblyContainingType<EmailValidation>();
scanner.ConnectImplementationsToTypesClosing(typeof(IValidation<>))
.OnAddedPluginTypes(t => t.Singleton());
});
-121--4223052- Мы использовали сегфолтинг Apache иногда на машине; вот сценарий, который мы использовали, пытаясь отладить проблему, поддерживая 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=yourself@example.com
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
Мы никогда не выясняли проблему...
Зачем Апачу вешать? Можете ли вы добраться до причины?
Существует ряд скриптов и инструментов для "демонизации" приложений и наблюдения за ними. Поскольку вы, кажется, находитесь в Debian или Ubuntu, взгляните на пакеты daemon
и daemontools
. Я уверен, что есть и другие.
Вы можете попробовать послать http запрос в apache (например, используя wget -timeout=10
) и если этот запрос тайм-аут или сбой (статус выхода != 0), вы убьете и перезапустите apache.
Может ли счетчик процесса действительно быть меньше нуля?
Этого должно быть достаточно:
if ! pgrep apache2 -c >/dev/null; then