web-dev-qa-db-fra.com

Python service utilisant Upstart sur Ubuntu

Je souhaite créer pour déployer un service Heartbeat (un script python) en tant que service utilisant Upstart.

Si j'ai bien compris, je dois ajouter un /etc/init/myheartbeatservice.conf avec le contenu suivant.

# my heartbeat service 

description     "Heartbeat monitor"

start on startup
stop on shutdown

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

Mon script démarre un autre processus de service. Il surveille les processus et envoie régulièrement des pulsations à un serveur externe. Les événements startup et shutdown sont-ils corrects? Aussi mon script crée un nouveau fil. Je suppose que je dois aussi ajouter fork daemon à mon fichier de configuration?

Merci.

5
Soumya Simanta

startup est l'événement que upstart émet au tout début de son exécution. Pour la plupart des services, c'est beaucoup trop tôt. Choses que vous pourriez ne pas avoir en ce moment:

  • réseau pour rechercher des noms d'hôte dans DNS ou avahi (vous pourriez ne pas l'avoir de toute façon, si c'est un système mobile, vous ne pouvez jamais compter sur cela, mais pour les serveurs, les choses sont différentes)
  • un système de fichiers à écrire (il n'est pas accessible en écriture après avoir été vérifié)
  • / usr pour lire python de! (parfois/usr est sur une partition séparée).

shutdown n'est en réalité pas un événement, bien qu'il ait été discuté en tant que tel à utiliser pour les versions futures.

Pour le moment, votre meilleur choix est de vous en tenir à l'ancienne méthode Unix et d'utiliser des niveaux d'exécution pour contrôler le moment du démarrage et de l'arrêt.

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

Les niveaux d'exécution sont l'ancienne méthode unix d'identification de l'état du système. [2345] n'est qu'un ensemble de tous les niveaux d'exécution utilisés pour le mode "Plusieurs utilisateurs", ce qui, même sur un ordinateur portable, signifie que le système fonctionne normalement. Si vous utilisez cela, vous pouvez compter sur des éléments tels que le système de fichiers et sur la mise en réseau statique. 99% de tous les travaux en démarrage doivent utiliser ces deux conditions de démarrage/d'arrêt.

Lorsque l’arrêt est activé, si le système entre dans un niveau d’exécution qui est non 2,3,4, ou 5, l’arrêté arrêtera le service. Le niveau d'exécution 0 correspond à l'arrêt et 1 à "mode de maintenance du système". 6 est pour rebot.

Nous finirons par ajouter de meilleurs noms pour ces abstractions, mais cela fonctionnera toujours.

De plus, vous n'avez pas besoin de script ou end script ici. Le mot clé exec exécutera simplement votre programme directement. Cela vous fera gagner quelques millisecondes car vous n’aurez pas à exécuter/bin/sh et à analyser la ligne exec ..., car upstart aura déjà analysé le fichier de travail.

5
SpamapS