Мне нужно контролировать несколько процессов, запущенных на моем веб-сервере. По какой-то причине лак в настоящее время падает один раз в день или два. Я использую monit для автоматического перезапуска лака, но он не работает. Вот моя запись в monit.conf для Varnish.
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
Файл журнала показывает, что после прекращения работы лака все попытки повторного запуска завершаются неудачно. Затем со временем монитор перестает следить за лаком.
У кого-нибудь есть предложения, как я могу это исправить? Или, что еще лучше, можете ли вы предложить другие простые способы автоматического мониторинга и перезапуска аварийных процессов? Спасибо!
Ответы:
Я бы заглянул в daemontools ( http://cr.yp.to/daemontools.html ).
Supervise был создан именно для этой цели - запускать процессы и наблюдать за ними, перезапуская их немедленно, если они когда-либо прекратятся.
Вы можете по-прежнему использовать monit, если вам нужно сделать что-то более сложное, чем простая проверка «все еще работает», и если процесс нужно перезапустить, то сделайте это с помощью supervise.
источник
Вы также можете использовать / etc / inittab для перезапуска мертвых процессов, используя действие возрождения .
Смотрите раздел inittab на http://aplawrence.com/Unixart/startup.html
источник
Вы можете использовать сценарии обработчика событий с Nagios, если у вас есть это для перезапуска служб.
Если для запуска лака требуется разрешение root (обычно это делают скрипты init.d), измените "/etc/init.d/varnish start" на "sudo /etc/init.d/varnish start". Но этого, вероятно, будет недостаточно, поскольку вы, вероятно, не захотите запускать какие-либо пользовательские мониторы, так как общие привилегии sudo nopasswd для всех команд и передача sudo сценарию оболочки будут в основном такими же плохими. Поэтому вам нужно выяснить, каким командам в этом скрипте инициализации требуется sudo, дать этим командам привилегии sudo в файле / etc / sudoers пользователю monit и, наконец, соответствующим образом отредактировать этот скрипт init. Или, может быть, вместо всего этого лака может быть запущен как пользователь без полномочий root?
Наконец, я уверен, что вы это знаете, но я все равно скажу это. Вы явно вкладываете в это много усилий, я надеюсь, что вы приложите столько же усилий, чтобы выяснить, почему лак падает и на самом деле его исправить (или вынудить разработчиков выяснить, почему) :-)
Обновление:
это может быть не так чисто, но простой способ сделать это с правами суперпользователя - установить скрипт, который проверяет, в порядке ли процесс, и если нет, запускает его. Затем просто запускайте этот скрипт каждые пару минут в качестве задания cron.
источник
Еще один замечательный метод взят из StackOverflow :
Это может быть добавлено в crontab:
Затем добавьте правило, чтобы запустить скрипт монитора:
Или добавлен как скрипт в
/etc/init.d
Посмотрите ответ StackOverflow для подробного объяснения того, почему это хороший подход.
источник
Я также искал самый простой способ справиться с этой проблемой. Самый простой способ, который я мог бы найти, это просто добавить
Restart=allways
к соответствующему.service
файлу/etc/systemd/system/multi-user.target.wants/
последнюю строку[service]
тега.После этого сделать
sudo systemctl daemon-reload
затемsudo systemctl restart service.service
перезагрузить изменения.Вы можете проверить, проверив, работает ли служба:,
systemctl status processname
проверьте отметку времени запуска. После этогоps -ef | grep servicename
, объявление убивает процесс с только что найденным идентификаторомkill 1234
. после этого сделайте ещеsystemctl status processname
раз и проверьте, обновлена ли начальная отметка времени.Это должно работать на:
источник