SonkoDmitry
@SonkoDmitry
Веб разработчик

Как проверять работу демона и в случае необходимости перезапускать его?

Есть демон на пхп, выполняющий некие задачи и периодически создающий задачи для Gearman. Необходимо проверять работу демона и в случае необходимости перезапускать его. С помощью чего можно реализовать подобное?
  • Вопрос задан
  • 3808 просмотров
Пригласить эксперта
Ответы на вопрос 9
happyproff
@happyproff
Счастливый веб-разработчик
Можно поставить в крон ежеминутный запуск этого демона, а в нём реализовать защиту от множественного запуска (через .pid-файл, например). Если демон умрёт, он будет запущен вновь в течение минуты.

Если требуется следить ещё и за тем, чтобы он не завис, можно заставить его тачить (touch) определённый файл каждую минуту. А в самом демоне при проверке .pid-файла проверять также и файл, который должен тачиться — если время обновления его больше двух минут, нужно убить запущенный демон (kill pid) и продолжить работу вместо него.

Или использовать supervisord.
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Crontab + pid file.
Ответ написан
Комментировать
ScorpLeX
@ScorpLeX
Писать в файл\базу время каждую минуту, другим скриптом по крону сверять время.
Ну это если совсем простой вариант.
Ответ написан
Комментировать
@Arik
А править демона можно?
Как вариант он может что-то писать в файл, допустим timestamp( 2014-01-01 00:00:01) по крону проверяете эту дату
Второй вариант демон блокирует какой-то файл на запись, если не ошибаюсь после любого завершения работы скрипта, php очищает память, рвет все соединения и разблокирует файлы. Получается когда файл будет доступен на запись значит демон больше мертв, чем жив.
Ответ написан
Комментировать
@denis_vl
Программист. Админ. Да и от скуки - на все руки.
Попробуй Monit. Умеет следить за процессом. Если процесс слетает - может его сам перезапустить. Есть минималистичный Web-интерфейс. Умеет отправляеть оповещения на почту, если что случилось.
Ответ написан
Комментировать
@inkvizitor68sl
Linux-сисадмин с 8 летним стажем.
Monit, RunIt или Ubic.
Ответ написан
Комментировать
IlyaEvseev
@IlyaEvseev
Opensource geek
Какой дистрибутив Линукса используется?
upstart и systemd умеют перезапускать упавшие сервисы без помощи дополнительных костылей.

Самодельный вариант /usr/local/bin/restart1:
#!/bin/sh
NAME="superpuper"
PIDFILE="/var/run/$NAME.pid"
test -s "$PIDFILE" || exit
PID="`cat $PIDFILE`"
ps "$PID" > /dev/null 2>&1 && exit
{ echo $NAME; date; } | mail -s "Resurrect dead service" root
/sbin/service $NAME start

/etc/cron.d/restart1:
* * * * * root /usr/local/bin/restart1
Ответ написан
Комментировать
hOtRush
@hOtRush
Supervisor в помощь. Используем в связке с геарманом, проблем особых не замечено
Ответ написан
Комментировать
@Jodes
Использую alertmon.
Пока не жаловался.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы