Seu arquivo de unidade está correto. Se você quer rodar qualquer arquivo python sob um venv você só precisa referenciar o binário python no diretório venv como você fez com /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
O que se destaca é o motivo pelo qual sua unidade falha: code=exited, status=200/CHDIR
. Isso provavelmente indica um problema no seu script.
Se você quiser depurar isso, faça o seguinte:
- Execute o comando que você adicionou a
ExecStart=
exatamente como na raiz para ver, se o problema for causado por seu script. - Se isso ocorrer sem erros, examine o diário com
journalctl -u <unit_name>
. Isso deve lhe dar mais algumas informações sobre problemas com sua unidade.
Post Scriptum
As duas opções de [Service]
a seguir funcionam:
ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py
ou
WorkingDirectory=/home/user/space
ExecStart=/home/user/anaconda3/bin/python run.py
A única diferença é que as chamadas relativas no seu script são executadas a partir de diretórios diferentes. Portanto, se o seu script contiver uma linha open("my_file", "w")
, no primeiro exemplo, criará um arquivo /my_file
e o segundo um arquivo /home/user/space/my_file
.