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.