Eu tenho um script python que eu normalmente o executo com este comando:
(environment) python run.py
Eu quero executar este script no início. (Estou usando o ubuntu) Aqui está o meu serviço:
[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, não consegui executar este script, mas poderia executar qualquer script que não estivesse dentro do ambiente. Como posso executar um script python na inicialização (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
Jasmim
fonte
fonte
/usr/bin/python run.py
consulte stackoverflow.com/questions/37211115/… e unix.stackexchange.com/questions/278188/…/path/to/your/virtualenv/bin/python
Respostas:
O arquivo da sua unidade está correto. Se você deseja executar qualquer arquivo python em um venv, basta fazer referência ao binário python no diretório venv , como você fez com
/home/user/anaconda3/bin/python
O que se destaca é a razão sua unidade falhar:
code=exited, status=200/CHDIR
. Provavelmente, isso indica um problema no seu script.Se você deseja depurar isso, faça o seguinte:
ExecStart=
exatamente como esse em root para ver se o problema foi causado pelo seu script.journalctl -u <unit_name>
. Isso deve fornecer mais informações sobre problemas com sua unidade.Post Scriptum
As duas
[Service]
opções a seguir funcionam:ou
A única diferença é que as chamadas relativas em seu script são executadas em diretórios diferentes. Portanto, se seu script contiver uma linha
open("my_file", "w")
, no primeiro exemplo, ele criará um arquivo/my_file
e o segundo, um arquivo/home/user/space/my_file
.fonte