Убедитесь, что демон cron продолжает работать

Убедитесь, что демон cron продолжает работать

Если надебиан 7сервер (wheezy), работающий на размещенной виртуальной машине и обновленном cronдемоне, есть ошибка, из-за которой cron перестал работать без очевидной причины. Поскольку это произошло только один раз с тех пор, его трудно отладить.

Как можно гарантировать, что cron автоматически перезапустится в случае повторного сбоя и отправит оповещение по электронной почте?

решение1

Вы всегда можете проверитьмонитпроект.
Вы можете перезапустить службы и поддерживать их в рабочем состоянии.
Если у вас нет возможности исправить cron, как предлагалось в комментариях.

решение2

Разве я не могу запустить что-то вроде daemontools для мониторинга и перезапуска процесса?

Да, действительно; и на некоторых машинах я делаю именно это. "Что-то вроде daemontools" на самом деле является менеджером сервисов изпакет едыНо другие члены семейства daemontools более чем способны контролировать GNU cron. (Vixie cron — это другое дело, но вы сказали Debian.)

GNU cron — одна из самых простых служб для запуска под управлением daemontools family service management. Она есть в коллекции скриптов запуска Gerrit Pape, как и в коллекции пакетов служб, которая сопровождает набор инструментов nosh.

Тем не менее, я не припомню, чтобы мне когда-либо приходилось перезапускать GNU cron.потому что он разбился.

С точки зрения захвата, управление услугами — это не просто автоматический перезапуск. Этотакжео ведении журнала и контроле ресурсов, оба из которых имеют отношение к задачедиагностика почемуУ вас происходит сбой GNU cron.

Диагностика проблемы будет включать в себя такие вещи, как:

  • Редактирование runпрограммы для softlimitвключения дампов ядра.
  • Редактирование restartсценария (или эквивалента)…
    • … чтобы проверить, завершился ли демон или был ли он завершен сигналом.
    • …для сбора керновых отвалов.
    • … для подачи оповещений и отправки уведомлений по почте. (Однажды я настроил restartскрипт, который отправлял мне по почте последние несколько строк в log/main/currentслучае сбоя/прекращения работы.)
    • … для настройки ограничения скорости перезапуска.
  • Чтение индивидуального журнала GNU cron и собственного журнала менеджера служб для определения того, когда и как часто перезапускался демон, а также какие сообщения об ошибках он вывел (если таковые имеются).

дальнейшее чтение

решение3

crondПоскольку через него нельзя осуществлять мониторинг, crondя бы сделал так:
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local

решение4

Не нужно устанавливать daemontools, runit, supervise, и т. д. Насколько бы полезными ни были эти инструменты, они охватывают случаи использования, которые вам обычно не нужны для одного только cron. То, что вам просто нужно, можно легко обработать с помощью init. Добавьте в /etc/inittab:

cron:2345:respawn:/usr/sbin/crond -n

Сначала убедитесь, crondчто поддерживает эту -nопцию. Это говорит ему не разветвляться и оставаться на переднем плане. ** Обязательно отключите crond из скриптов rc **.

/usr/lib/lsb/remove_initd /etc/init.d/crond

Если по какой-то причине crond выводит данные в stdout или stderr, вам нужно будет написать скрипт-обертку для обработки этого вывода и запустить скрипт-обертку. Сохраняйте этот скрипт простым:

#!/bin/sh
#crond-wrapper.sh 
exec crond -n &>>/var/log/crond

В качестве альтернативы вы можете изменить существующий упакованный init.d/crondскрипт на тот, который вызывается crond -nв цикле while. Но в этом случае вам придется быть умным, сохраняя pidдля последующего использования этим скриптом.

Связанный контент