2017-06-27 2 views
0

J'ai un script Python contenant une boucle comme ceci:Créer un service pour un script Python

while True: 
    if p.poll(waitTime): 
     if j.process() == journal.APPEND: 
      for entry in j: 
       process_data(entry)) 

Actuellement, mon regard de service comme celui-ci:

[Unit] 
Description=Journald shipper 
Requires=systemd-journald.service 
After=systemd-journald.service 

[Service] 
Type=forking 
ExecStart=/usr/bin/myScript.py 

[Install] 
WantedBy=multi-user.target 

Le problème que j'ai actuellement est le La commande «start» renvoie un timeout. C'est logique parce que le script est jamais terminé, mais le service ne démarre jamais :(

Donc, je suppose que je fais des choses mauvaises. Dois-je modifier le fichier .service pour permettre l'exécution du script sans attendre sa fin ou dois-je modifier ma boucle «infini»?

Et comment puis-je faire cela?

+1

'si p.poll (waitTime):' est incorrect. Il est supposé vérifier si le script est terminé, mais échoue si le script échoue avec un code de retour nul. Faites 'si p.poll (waitTime) n'est pas None:' à la place. –

Répondre

0

Je pense que des informations supplémentaires sur votre plate-forme peut être nécessaire pour répondre correctement cela. Je ne dis cela parce que je ne suis pas personnellement au courant le formatage du service que vous avez là

Cependant, si vous voulez une méthode Python pure, vous pouvez utiliser le paquet daemonocle pour créer le service. https://pypi.python.org/pypi/daemonocle

alternativement, et la façon dont je réalise normalement cette tâche, vous pouvez utiliser un squelette deamon comme celui-ci: https://gist.github.com/shawnrice/11076762
avec cette méthode, vous devez modifier ce modèle pour exécuter le script et l'installer dans/etc/init.d après la première exécution sur le script Deamon, vous devriez être en mesure d'utiliser le "service" standard pour contrôler votre service.

+0

Voici le script que j'essaie de lancer: https://github.com/chindit/journald-shipper Je le lance sur un ArchLinux mis à jour – chindit