cicada3301
@cicada3301
DevOps newbe

Как автоматически переподнимать приложение в linux?

Мужики подскажите пожалуйста, у меня есть сервис (wrapper - следит за csync2), который по тем или иным причинам может завершиться с ошибкой, как мне настроить автоматический его перезапуск? OS Debian9. Возможно есть какая-то утилита для этого (
  • Вопрос задан
  • 606 просмотров
Пригласить эксперта
Ответы на вопрос 4
Oxyd
@Oxyd
Linux enthusiast
systemd Кто-бы что-бы не говорил, это самое простое и надёжное решение.
Ответ написан
нет под рукой csync2
но молгу дать общую логику для самого простого мониторинга
*/1 * * * * /etc/init.d/php5.3-fpm status  | grep -oq "Active: failed" && /etc/init.d/php5.6-fpm restart


Пример сразу для крона
как мы видим сморим статус демона, в ответе ищем слово Active: failed
&& - Если истина то выполнить команду
У цсинка может быть немного по другому но по сути
вам нужно
1. определить критерий краша.
2. на основание этого краша сделать рестарт демона.
3. можно использовать сторонние мониторинг там zabbix но я думаю у вас нет такого объема.
Ответ написан
CityCat4
@CityCat4
У тролля даже мозги - и то каменные!
Крутой и мозго#бический - systemd, если не блюешь с него

Босяцкий:
# Winbindd processes
entries=`ps -ax | grep winbindd | grep -v grep | wc -l`

# When there are 0 entries, start winbindd
if [ $entries -eq 0 ]; then
  cd /usr/local/etc/rc.d
  samba start
  /usr/bin/logger -4 -i -t chkwinbind -p daemon.info Winbindd crash detected, process restarted
 else
   /usr/bin/logger -4 -i -t chkwinbind -p daemon.info Running $entries winbindd process\(es\)
fi

Это проверялка процесса winbinnd, написанная - реально - лет двадцать назад :) Ставится в крон.
Ответ написан
@Karpion
Можно написать скрипт на shell (sh, csh, bash). Он запускает программу; дожидается её завершения (тут вообще ничего делать не нужно, это штатное поведение); проверяет код завершения процесса и логи; и принимает решение - перезапустить программу или нет.

Есть программы, которые "заныривают в background" - процесс делает fork, родитель завершается, чилдрёнок работает. Это как раз против того, чтобы запустивший программу скрипт дожидался завершения.
Как правило, так делают всякие программы-демоны типа SendMail, Apache, Squid и прочие. Но такие программы оставляют файл типа /var/run/программа.pid (путь м.б. другой; имя файла бывает иное), в котором в первой строке записан id процесса (если программа запускает несколько копий - то id главного процесса). Далее очевидно - надо дожидаться завершения этого процесса. И я не уверен, что можно получить код завершения - надо смотреть документацию.

Если файл /var/run/программа.pid не создан - значит, процесс вообще не запустился; ну или запустился и успел сдохнуть. Хотя если процессу прислать "kill -9" - то он сдохнет, но /var/run/программа.pid останется" но записанный там id процесса, скорее всего, будет свободен. Это тоже надо учесть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы