I have a python script that I normally run it with this command:
(environment) python run.py
I want to run this script at start. (I'm using ubuntu) Here is my 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, I couldn't run this script, but I could run any script that is not inside environment. How can I run a python script at startup (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)
Your unit file is correct. If you want to run any python file under an venv you just need to reference the python binary in the venv directory like you did with
/home/user/anaconda3/bin/python
What sticks out is the reason your unit fails:
code=exited, status=200/CHDIR
. This most likely indicates an issue within your script.If you want to debug that, you would do the following:
ExecStart=
exactly like that under root to see, if the issue is caused by your script.journalctl -u <unit_name>
. That should give you some more information on issues with your unit.Post Scriptum
Both of the following
[Service]
options work:or
The only difference is that relative calls in your script run from different directories. So if your script contains a line
open("my_file", "w")
, in the first example it would create a file/my_file
and the second a file/home/user/space/my_file
.