Ответ 1
Из вашего упоминания о Upstart я буду считать, что этот вопрос предназначен для службы, запущенной на сервере Ubuntu.
На сервере Ubuntu вышестоящее задание - это самый простой и удобный вариант для создания всегда службы, которая запускается в нужное время и может быть остановлена или перезагружена знакомыми командами.
Чтобы создать услугу выскочки, вам нужно добавить один файл в /etc/init
. Вызывается <service-name>.conf
. Пример script выглядит следующим образом:
description "My chat server"
author "[email protected]"
start on runlevel [2345]
stop on runlevel [!2345]
env AN_ENVIRONMENTAL_VARIABLE=i-want-to-set
respawn
exec /srv/applications/chat.py
Это означает, что каждый раз, когда машина запускается, она запускает программу chat.py
. Если он умирает по какой-либо причине, он перезапустит его. Вам не нужно беспокоиться о двойном форсировании или иначе демонамизировать свой код. Это было для вас выскочкой.
Если вы хотите остановить или запустить свой процесс, вы можете сделать это с помощью
service chat start
service chat stop
Имя chat
будет автоматически найдено из имени файла .conf
внутри /etc/init
Я только освещаю основы выскочки здесь. Есть много других возможностей, чтобы сделать его еще более полезным. Все доступно, запустив man upstart
.
Этот метод намного удобнее, чем писать собственный код демонизации. Файл конфигурации 4-8 строк для встроенного компонента Ubuntu гораздо менее подвержен ошибкам, чем безопасный двойной код fork, а затем другой монитор процесса, чтобы убедиться, что он не исчезнет.
Монит - это немного красная селедка. Если вы хотите оповещения о простоях, вам все равно нужно запустить программу мониторинга на отдельном сервере. Положитесь на выскочку, чтобы процесс всегда выполнялся на сервере. Затем выполните другую службу, которая гарантирует, что сервер фактически запущен. Простоя происходит по разным причинам. Процесс, выполняющийся на том же сервере, ничего вам не скажет, если сам сервер опустится. Вам нужна отдельная машина (или сторонний поставщик, такой как pingdom), чтобы предупредить вас об этом состоянии.