Мне нужно отслеживать несколько процессов, запущенных на моем веб-сервере. Почему-то лак сейчас вылетает раз в день-два. Я использую 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
Файл журнала показывает, что после того, как лак перестает работать, все попытки перезапуска впоследствии терпят неудачу. Потом в конце концов monit перестает следить за лаком.
У кого-нибудь есть предложения, как я могу это исправить? Или еще лучше, можете ли вы предложить другие простые способы автоматического мониторинга и перезапуска сбойных процессов? Спасибо!
Я бы посмотрел на daemontools (http://cr.yp.to/daemontools.html).
Supervise был создан именно для этой цели - запускать процессы и наблюдать за ними, немедленно перезапускать их, если они когда-либо завершаются.
Вы все равно можете использовать monit, если вам нужно сделать что-то более сложное, чем простая проверка «работает ли он», и если процесс необходимо перезапустить, то сделайте это через supervise.
Вы также можете использовать / etc / inittab перезапустить мертвые процессы с помощью респаун действие.
См. Раздел inittab на http://aplawrence.com/Unixart/startup.html
Еще один отличный метод взято из StackOverflow:
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
Это можно добавить в crontab:
crontab -e
Затем добавьте правило для запуска сценария монитора:
@reboot /usr/local/bin/myservermonitor
Или добавлен как скрипт в /etc/init.d
Увидеть StackOverflow ответ для подробного объяснения того, почему это хороший подход.
Ты можешь использовать скрипты обработчика событий с Nagios если у вас есть это для перезапуска служб.
Если varnish требует прав root для запуска (обычно это делают сценарии init.d), измените "/etc/init.d/varnish start" на "sudo /etc/init.d/varnish start". Но этого, вероятно, будет недостаточно, так как вы, вероятно, не захотите давать любому пользователю, запускаемому monit, как общие привилегии sudo nopasswd для всех команд, и давать sudo сценарию оболочки было бы в основном так же плохо. Итак, вам нужно будет выяснить, какие команды в этом сценарии инициализации нуждаются в sudo, предоставить этим командам привилегии sudo в файле / etc / sudoers пользователю monit и, наконец, отредактировать этот сценарий инициализации соответствующим образом. А может вместо всего этого лака можно запускать не root?
Наконец, я уверен, что вы это знаете, но я все равно скажу это. Вы явно прикладываете к этому много усилий, я надеюсь, что вы прикладываете столько же усилий, чтобы выяснить, почему лак дает сбой, и на самом деле исправить это (или преследуете разработчиков, чтобы выяснить, почему) :-)
Обновить:
Это может быть не так чисто, но простой способ сделать это от имени пользователя root может заключаться в настройке сценария, который проверяет, в порядке ли процесс, и если нет, запускает его. Затем просто запускайте этот скрипт каждые пару минут как задание cron.
Я также искал самый простой способ справиться с этой проблемой. Самый простой способ найти - просто добавить Restart=always
касающимся .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
, ad убить процесс с помощью только что найденного идентификатора kill 1234
. после этого делай systemctl status processname
еще раз и проверьте, обновлена ли отметка времени начала.
Также проверьте /var/log/daemon.log
на ошибки
Он должен работать на:
Одна вещь, о которой, кажется, никто не спросил ...
Зачем Varnish рушится?
(Я никогда не использовал это. Это мог быть "нормальным" для него, но почему-то я сомневаться Это...)
Конечно, вы можете потратить целую вечность, придумывая "умные" способы автоматического перезапуска вашего автомобиля, но, безусловно, это лучше не вбить его в стену в первую очередь?