Сервис Python, использующий Upstart в Ubuntu

Я хочу создать развертывание службы пульса (сценарий 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 в мой файл настроек?

Спасибо.

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

1 ответ

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

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

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

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

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

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

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

Со временем мы добавим более подходящие названия для этих абстракций, но они всегда будут работать.

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

0
ответ дан 3 April 2012 в 14:10

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

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