Mam skrypt Pythona, który normalnie uruchamiam za pomocą tego polecenia:
(environment) python run.py
Chcę uruchomić ten skrypt na początku. (Używam ubuntu) Oto moja usługa:
[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, nie mogłem uruchomić tego skryptu, ale mogłem uruchomić dowolny skrypt, który nie znajduje się w środowisku. Jak mogę uruchomić skrypt Pythona podczas uruchamiania (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
Jaśmin
źródło
źródło
/usr/bin/python run.py
patrz stackoverflow.com/questions/37211115/... i unix.stackexchange.com/questions/278188/.../path/to/your/virtualenv/bin/python
Odpowiedzi:
Twój plik jednostki jest poprawny. Jeśli chcesz uruchomić dowolny plik Pythona w pliku Venv, musisz po prostu odwołać się do pliku binarnego Pythona w katalogu Venv, tak jak zrobiłeś to z
/home/user/anaconda3/bin/python
Co rzuca się w oczy jest powodem jednostka nie:
code=exited, status=200/CHDIR
. To najprawdopodobniej oznacza problem w twoim skrypcie.Jeśli chcesz to debugować, wykonaj następujące czynności:
ExecStart=
dokładnie w katalogu root, aby sprawdzić, czy przyczyną problemu jest skrypt.journalctl -u <unit_name>
. To powinno dać ci więcej informacji na temat problemów z twoim urządzeniem.Post Scriptum
Obie następujące
[Service]
opcje działają:lub
Jedyną różnicą jest to, że względne wywołania w skrypcie są uruchamiane z różnych katalogów. Jeśli więc skrypt zawiera wiersz
open("my_file", "w")
, w pierwszym przykładzie utworzy plik,/my_file
a drugi plik/home/user/space/my_file
.źródło