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

Я хочу создать для развертывания службы 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?

Спасибо.

5
задан 3 April 2012 в 15:10

1 ответ

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

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

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

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

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

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

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

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

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

5
ответ дан 25 May 2018 в 13:00

Другие вопросы по тегам:

Похожие вопросы: