Служба Python с использованием Upstart на Ubuntu

5

Я хочу создать для развертывания службы heartbeat (скрипт python) в качестве службы с использованием Upstart.

Я понимаю, что я должен добавить /etc/init/myheartbeatservice.conf со следующим содержимым.

# my heartbeat service 

description     "Heartbeat monitor"

start on startup
stop on shutdown

script
    exec /path/to/my/python/script.py
end script 

Мой скрипт запускает другой сервисный процесс и контролирует процессы и регулярно посылает пульс внешнему серверу. Являются ли startup и shutdown правильными событиями? Также мой скрипт создает новый поток. Я предполагаю, что мне также нужно добавить fork daemon в мой файл conf?

Спасибо.     

задан Soumya Simanta 03.04.2012 в 12:10
источник

1 ответ

5

startup - это событие, когда выскочка испускает себя в самом начале его выполнения. Для большинства служб это слишком рано. Вещи, которые у вас могут не быть в это время:

  • для поиска имен хостов в DNS или avahi (у вас может не быть этого в любом случае, если его мобильная система вы никогда не сможете рассчитывать на это, но для серверов все по-другому)
  • файловая система для writeto (она не доступна для записи до тех пор, пока она не будет проверена)
  • / usr, чтобы читать python! (иногда / usr находится на отдельном разделе).

shutdown фактически не является событием вообще, хотя это фактически обсуждалось как одно для использования для будущих версий.

В настоящий момент лучше всего придерживаться старого способа unix и использовать уровни запуска для управления, когда нужно начинать и останавливаться.

start on runlevel [2345]
stop on runlevel [^2345]

Уровни запуска - это старый способ unix идентифицировать, в каком состоянии находится система. [2345] - это всего лишь набор уровней запуска, которые используются для режима «многопользовательский», который даже на ноутбуке означает нормальную рабочую систему. Если вы используете это, вы можете рассчитывать на такие вещи, как файловая система, и на любую статическую сеть. 99% всех вышестоящих работ должны использовать эти два условия старт / стоп.

При включенной остановке, если система войдет в любой уровень выполнения not 2,3,4 или 5, выскочка остановит эту услугу. Уровень запуска 0 для остановки, а 1 - для режима обслуживания системы. 6 для ребота.

В конце концов мы добавим более лучшие имена для этих абстракций, но они всегда будут работать.

Кроме того, вам не нужны script или end script . Ключевое слово exec просто выполнит вашу программу напрямую. Это позволит сэкономить несколько миллисекунд времени, потому что вам не придется выполнять / bin / sh и анализировать строку exec ... , так как upstart уже проанализировал файл задания.

    
ответ дан SpamapS 12.04.2012 в 23:08
источник