Systemd: Başlangıçta Python Komut Dosyası Çalıştırma (virtualenv)


11

Ben normalde bu komutla çalıştırmak bir python komut dosyası var:

(environment) python run.py

Bu komut dosyasını başlangıçta çalıştırmak istiyorum. (Ubuntu kullanıyorum) İşte benim hizmetim:

[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, bu komut dosyasını çalıştıramadım, ancak ortam içinde olmayan herhangi bir komut dosyasını çalıştırabilirim. Başlangıçta bir python betiğini nasıl çalıştırabilirim (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)

1
Günlükler ve durum ne diyor?
Federico Sierra

Sorumu düzenledim. Çok teşekkürler @FedericoSierra
Jasmine

1
Senaryo venv dışında çalıştırılıyor, /usr/bin/python run.pybkz. Stackoverflow.com/questions/37211115/… ve unix.stackexchange.com/questions/278188/…
Federico Sierra

Onları denedim. Ben "python run.py" değil "python /user_sent/run.py" çalıştırmak zorunda
Jasmine

1
Python yolu sanal ortam içindeki versiyona işaret etmelidir, Ör./path/to/your/virtualenv/bin/python
Federico Sierra

Yanıtlar:


14

Birim dosyanız doğru. Bir venv altında herhangi bir python dosyasını çalıştırmak istiyorsanız , venv dizinindeki gibi python ikili dosyalarına başvurmanız yeterlidir./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

Ne sopalarla senin birim başarısız nedeni: code=exited, status=200/CHDIR. Bu büyük olasılıkla komut dosyanızdaki bir sorunu gösterir.

Bunu hata ayıklamak istiyorsanız, aşağıdakileri yaparsınız:

  1. ExecStart=Soruna komut dosyanızdan kaynaklanıp kaynaklanmadığını görmek için kök altındakine eklediğiniz komutu çalıştırın .
  2. Bu hatasız çalışıyorsa, dergiye ile bakın journalctl -u <unit_name>. Bu, biriminizle ilgili sorunlar hakkında size daha fazla bilgi vermelidir.

Post Scriptum

Aşağıdaki [Service]seçeneklerin ikisi de işe yarar:

ExecStart=/home/user/anaconda3/bin/python /home/user/space/run.py

veya

WorkingDirectory=/home/user/space
ExecStart=/home/user/anaconda3/bin/python run.py

Tek fark, kodunuzdaki göreli çağrıların farklı dizinlerden çalıştırılmasıdır. Komut dosyanız bir satır içeriyorsa open("my_file", "w"), ilk örnekte bir dosya /my_fileve ikincisi bir dosya oluşturur /home/user/space/my_file.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.