consignation stdout avec le service python

J’essaie d’exécuter un script python en arrière-plan en tant que service. Pour ce faire, j’ai utilisé ce script que j’ai trouvé sur le net.

Il est stocké dans /etc/init/myscript.conf et commence avec le service myscript start

description "MyScript" author "Sherab Giovannini " start on runlevel[234] stop on runlevel [0156] chdir /root/projects/myscript exec /root/projects/myscript/script.py | logger respawn 

Mais je n’ai pas trouvé comment redirect le stdout / stderr vers n’importe où … J’ai essayé avec:

 exec /root/projects/myscript/script.py > some.txt 

Aussi avec …

 exec /root/projects/myscript/script.py >> some.txt 

et toutes les combinaisons que j’ai trouvées en cherchant sur Google … Désolé si c’est une question sortingviale mais je suis coincé.

Merci

Le fichier que vous avez installé est un script de upstart .

Essayez ces options:

 # Note the full pathname exec /root/projects/myscript/script.py > /tmp/some.txt 

ou

 # Note the shell command: exec sh -c "/root/projects/myscript/script.py > /tmp/some.txt" 

Confirmez que le script Python est exécutable:

 $ chmod +x /root/projects/myscript/script.py 

Examinez les fichiers journaux du système pour voir s’il existe un message d’erreur utile:

 sudo vim /var/log/messages /var/log/syslog ... 

EDIT: upstart ordinairement exécute directement un script, donc les caractères de redirection de shell n’auront aucun effet. Une exception est que upstart invoquera /bin/sh s’il y a un $ ou un autre caractère spécial. Apparemment > ne compte pas. Alors, essayez ceci dans votre script de démarrage:

 exec FOO=$$ /root/projects/myscript/script.py > /tmp/output.txt 2> /tmp/error.txt 

Refs:

Nohup et & sont des outils que vous recherchez dans les environnements unix avec bash. Nohup assurez-vous que la commande ne “raccroche” pas lorsque vous fermez le terminal. et “&” à la fin de la déclaration le met en arrière-plan. ‘>’ et ‘>>’ servent respectivement à créer de nouveaux fichiers et à les append à des fichiers existants.

en bash pour exécuter cela à la console, vous diriez

 nohup cmd >>output.txt 2>error.txt & 

si vous allez mettre ceci dans un script de conf, alors vous pouvez laisser tomber le ‘nohup’

 cmd >>output.txt 2>error.txt & 

Eh bien, j’ai finalement trouvé cette méthode pour exécuter le processus et éviter la mise en mémoire tampon.

 nohup python -u /root/projects/myscript/myscript.py > /var/tmp/stdout.log & 

Merci à tous ceux qui ont consortingbué sur ce post.