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)
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 python binaire dans le répertoire venv comme vous l'avez fait avec /home/user/anaconda3/bin/python
[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
Ce qui ressort, c'est la raison pour laquelle votre appareil tombe en panne: 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 options [Service]
Suivantes fonctionnent:
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
ou
WorkingDirectory=/home/user/space
ExecStart=/home/user/anaconda3/bin/python run.py
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
.