Я использую Monit для этой цели, это бесплатно и с открытым исходным кодом. Он делает то, что вам нужно, и многое другое.
Что может сделать Monit
Monit может запустить процесс, если он не запускается, перезапустить процесс, если он не отвечает, и остановить процесс, если он использует слишком много ресурсов. Вы можете использовать Monit для мониторинга файлов, каталогов и файловых систем на предмет изменений, таких как изменения меток времени, изменений контрольных сумм или размеров. Вы также можете контролировать удаленные хосты; Monit может пропинговать удаленный хост и может проверять соединения порта TCP/IP и протоколы сервера.
Монитором управляет простой в использовании управляющий файл, основанный на синтаксисе, ориентированном на токены свободного формата. Мониторинг журналов в системный журнал или в свой собственный файл журнала и уведомляет вас об условиях ошибки и состоянии восстановления с помощью настраиваемого предупреждения
Мне также нравится их философия дизайна:
Важно, чтобы инструмент системного мониторинга просто работал - все время, и вы должны быть в состоянии доверить ему это. Средство мониторинга системы должно быть ненавязчивым, и вы сможете забыть о нем после его установки. То есть до тех пор, пока sshd не умрет на вашем сервере, расположенном в 50 милях. Когда это происходит, полезно знать, что вы установили этот дополнительный уровень безопасности и защиты - просто подождите несколько секунд, и Monit перезапустит демон sshd. Также полезно получать оповещения по электронной почте до того, как диски сервера заполнятся, или если ваш http-сервер внезапно окажется с косой чертой.
Monit спроектирован как автономная система и не зависит от плагинов или каких-либо специальных библиотек для запуска. Вместо этого он работает прямо из коробки и может использовать уже существующую инфраструктуру в вашей системе. Например, Monit легко интегрируется с init и может использовать существующие rc-скрипты уровня запуска для управления сервисами. Есть также гибкость для тех особых случаев, когда вам нужна определенная настройка для службы.
Monit компилируется и работает на большинстве версий UNIX. Это небольшая программа, ее вес составляет чуть более 300 КБ. Существует поддержка компиляции с заменами glibc, такими как uClibc, если вам нужно, чтобы она была еще меньше.
Поскольку у вас нет доступа с правами root, такой скрипт может работать в соответствии с вашими требованиями:
«Если задание не запущено, запустите задание»
if [ $(ps ax | grep -v grep | grep "/usr/local/apache2/bin/httpd" | wc -l) -eq 0 ]
then
echo "httpd Service not running"
apachectl start
fi
вышеприведенный код написан мной и протестирован с помощью cron и демона Apache httpd. Он просто ищет вашу строку в текущем списке процессов. Если найдено 0 строк, он не работает, поэтому перезапустит его. Обязательно grep -v grep
чтобы исключить поиск из результатов процесса. Попробуйте использовать полный путь к бинарному файлу, чтобы убедиться, что он находится в ваших запросах. Если вы используете, например, только httpd
, то, открыв httpd.conf
в vim, вы заставите программу думать, что служба httpd работает, хотя на самом деле это не так. Конечно, ваш метод запуска службы также будет другим.