Назад | Перейти на главную страницу

Простой способ перезапустить сбойные процессы?

Мне нужно отслеживать несколько процессов, запущенных на моем веб-сервере. Почему-то лак сейчас вылетает раз в день-два. Я использую 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 на ошибки

Он должен работать на:

  • Debian 7 и Debian 8
  • Ubuntu 15.04 и новее
  • CentOS 7 и новее

Одна вещь, о которой, кажется, никто не спросил ...

Зачем Varnish рушится?

(Я никогда не использовал это. Это мог быть "нормальным" для него, но почему-то я сомневаться Это...)

Конечно, вы можете потратить целую вечность, придумывая "умные" способы автоматического перезапуска вашего автомобиля, но, безусловно, это лучше не вбить его в стену в первую очередь?