вы просто редактируете строку:
ssh $host /path/of/chk_auto_up > "cmd_output.txt"
Определите абсолютный путь команды.
Оригинальный daemontools Бернштейна не имеет механизма для этого. Есть только run
программа в каталоге служб и фиксированная политика автоперезапуска. Однако несколько представителей семейства daemontools усовершенствовали этот механизм и создали гибкие механизмы общего назначения, которые можно использовать для решения подобных ситуаций.
finish
программы. notify
. rc.main
с подкомандой reset
. перезапуска
программы. Это все механизмы общего назначения, которые могут быть использованы в вашей ситуации. Здесь я лишь собираюсь более подробно обсудить управление службами nosh. Должно быть достаточно очевидно, как применить это к остальным.
В управлении сервисами nosh используются те же расширенные (относительно оригинала Бернштейна) состояния сервиса, что и в daemontools-encore: остановлен, запущен, запущен, работает, не удалось, и остановлен.
Перед запуском службы, когда она находится в состоянии start, менеджер служб nosh запускает программу start
.
Когда служба завершается, но все еще находится в состоянии "up", менеджер службы nosh запускает программу restart
в состоянии failed, чтобы определить, следует ли перейти обратно в состояние running или в состояние stopping (и далее в состояние stopped). Программа restart
делает это определение для конкретной службы, и она явно является местом для принятия решений о том, перезапускалась ли служба "слишком много раз" или стала неперезапускаемой каким-то другим способом.
restart
в качестве аргументов командной строки передается информация о том, как завершился основной процесс сервиса (был ли это обычный выход или в ответ на сигнал, а также код выхода или конкретный сигнал). Менеджер служб выбирает переход обратно в состояние running, если программа restart
может быть запущена и завершается со статусом успеха, и переходит в состояние stopping (и далее stopped) в противном случае.
restart
и start
могут быть чем угодно: Perl-программы, shell-скрипты, execline-программы, скомпилированные двоичные файлы и так далее. Это довольно тривиальные упражнения в написании сценариев оболочки, с case
...esac
и if
...fi
. Есть несколько примеров restart
программ, написанных в shell script, поставляемых в пакете nosh-bundles, который доступен для Debian/Ubuntu и для FreeBSD/PC-BSD/DragonFlyBSD/&c. .
Итак, чтобы принять решение о том, была ли служба перезапущена "слишком много раз", вы должны в программе start
обнулить инициализацию счетчика (в файле в каталоге службы), а в программе restart
увеличить этот счетчик и вернуть статус успеха, только если счетчик меньше определенного значения. Конечно, вы можете сделать так, чтобы решение включало больше и других факторов.
SIGTERM
. период сна
. service-manager
. nosh Guide Руководство nosh Guide доступно как пакет Debian/Ubuntu и пакет FreeBSD/PC-BSD/DragonFlyBSD/&c., а руководство service-manager
доступно на вашей машине без необходимости подключения к Интернету через:
man service-manager
xdg-open /usr/local/share/doc/nosh/service-manager.html
supervise
. руководство daemontools-encore. §8. runsv
. руководство runit. §8. perpetrate
. руководство perp. §5. s6-supervise
. руководство по s6. Программное обеспечение Skarnet.