J'ai un script python que je lance normalement avec cette commande:
(environment) python run.py
Je veux exécuter ce script au démarrage. (J'utilise ubuntu) Voici mon service:
[Unit]
Description=My Script Service
After=multi-user.target
[Service]
Type=idle
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
[Install]
WantedBy=multi-user.target
BTW, je ne pouvais pas exécuter ce script, mais je pouvais exécuter n'importe quel script qui n'est pas dans l'environnement. Comment puis-je exécuter un script python au démarrage (virtualenv)?
sudo systemctl status user_sent
● user_sent.service - Mail Service
Loaded: loaded (/lib/systemd/system/user_sent.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since xxxxx 16:30:20 MSK; 3s ago
Process: 3713 ExecStart=/usr/bin/python run.py (code=exited, status=200/CHDIR)
Main PID: 3713 (code=exited, status=200/CHDIR)
python
systemd
daemon
virtualenv
Jasmin
la source
la source
/usr/bin/python run.py
voir stackoverflow.com/questions/37211115/… et unix.stackexchange.com/questions/278188/…/path/to/your/virtualenv/bin/python
Réponses:
Votre fichier d'unité est correct. Si vous souhaitez exécuter un fichier python sous un venv, il vous suffit de référencer le binaire python dans le répertoire venv comme vous l'avez fait avec
/home/user/anaconda3/bin/python
Ce qui dépasse est la raison pour laquelle votre appareil échoue:
code=exited, status=200/CHDIR
. Cela indique très probablement un problème dans votre script.Si vous souhaitez déboguer cela, vous devez procéder comme suit:
ExecStart=
exactement comme cela sous root pour voir si le problème est dû à votre script.journalctl -u <unit_name>
. Cela devrait vous donner plus d'informations sur les problèmes avec votre appareil.Post Scriptum
Les deux
[Service]
options suivantes fonctionnent:ou
La seule différence est que les appels relatifs dans votre script s'exécutent à partir de différents répertoires. Donc, si votre script contient une ligne
open("my_file", "w")
, dans le premier exemple, il créerait un fichier/my_file
et le second un fichier/home/user/space/my_file
.la source