Tengo un script de Python que normalmente lo ejecuto con este comando:
(environment) python run.py
Quiero ejecutar este script al inicio. (Estoy usando ubuntu) Aquí está mi servicio:
[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
Por cierto, no pude ejecutar este script, pero podría ejecutar cualquier script que no esté dentro del entorno. ¿Cómo puedo ejecutar un script de Python al inicio (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
Jazmín
fuente
fuente
/usr/bin/python run.py
consulte stackoverflow.com/questions/37211115/… y unix.stackexchange.com/questions/278188/…/path/to/your/virtualenv/bin/python
Respuestas:
Su archivo de unidad es correcto. Si desea ejecutar cualquier archivo python en un venv , solo necesita hacer referencia al binario de python en el directorio venv como lo hizo con
/home/user/anaconda3/bin/python
Lo que sobresale es la razón por la que su unidad no:
code=exited, status=200/CHDIR
. Esto probablemente indica un problema dentro de su script.Si desea depurar eso, haría lo siguiente:
ExecStart=
exactamente así en la raíz para ver si el problema es causado por su script.journalctl -u <unit_name>
. Eso debería darle más información sobre los problemas con su unidad.Post Scriptum
Las dos
[Service]
opciones siguientes funcionan:o
La única diferencia es que las llamadas relativas en su script se ejecutan desde diferentes directorios. Entonces, si su script contiene una línea
open("my_file", "w")
, en el primer ejemplo crearía un archivo/my_file
y el segundo un archivo/home/user/space/my_file
.fuente