सिस्टमड: स्टार्टअप पर एक पायथन स्क्रिप्ट चलाएँ (virtualenv)


11

मेरे पास एक पायथन स्क्रिप्ट है जिसे मैं सामान्य रूप से इस कमांड से चलाता हूं:

(environment) python run.py

मैं इस स्क्रिप्ट को शुरू में चलाना चाहता हूं। (मैं ubuntu का उपयोग कर रहा हूँ) यहाँ मेरी सेवा है:

[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, मैं इस स्क्रिप्ट को नहीं चला सकता था, लेकिन मैं ऐसी कोई भी स्क्रिप्ट चला सकता था जो पर्यावरण के अंदर न हो। मैं स्टार्टअप (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
लॉग और स्थिति क्या कहते हैं?
फेडेरिको सिएरा

मैंने अपना प्रश्न संपादित किया है। बहुत धन्यवाद @FedericoSierra
जैस्मीन

1
स्क्रिप्ट वेन के बाहर रननिग है, /usr/bin/python run.pyदेखें stackoverflow.com/questions/37211115/… और unix.stackexchange.com/questions/278188/…
फेडेरिको सिएरा

मैंने उन्हें आजमाया। मुझे "python run.py" नहीं "python /user_sent/run.py"
जैस्मिन

1
अजगर पथ आभासी वातावरण के अंदर संस्करण की ओर इंगित करना चाहिए, जैसे/path/to/your/virtualenv/bin/python
फेडेरिको सिएरा

जवाबों:


14

आपकी इकाई फ़ाइल सही है। यदि आप किसी वेव के तहत किसी भी पायथन फाइल को चलाना चाहते हैं, तो आपको सिर्फ वेव डायरेक्टरी में अजगर बाइनरी को रेफर करना होगा , जैसे आपने किया था/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

क्या बाहर चिपक कारण अपनी यूनिट में विफल रहता है है: code=exited, status=200/CHDIR। यह सबसे अधिक संभावना आपकी स्क्रिप्ट के भीतर एक मुद्दे को इंगित करता है।

यदि आप डिबग करना चाहते हैं, तो आप निम्न कार्य करेंगे:

  1. ExecStart=यदि आपके स्क्रिप्ट के कारण समस्या उत्पन्न होती है, तो देखने के लिए रूट के तहत आपके द्वारा जोड़ी गई कमांड को चलाएं ।
  2. यदि वह बिना किसी त्रुटि के चलता है, तो जर्नल को देखें journalctl -u <unit_name>। आपको अपनी इकाई के साथ मुद्दों पर कुछ और जानकारी देनी चाहिए।

स्क्रिप्टम के बाद

निम्नलिखित दोनों [Service]विकल्प काम करते हैं:

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

या

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

अंतर केवल इतना है कि आपकी स्क्रिप्ट में रिश्तेदार अलग-अलग निर्देशिकाओं से चलते हैं। इसलिए यदि आपकी स्क्रिप्ट में एक पंक्ति है open("my_file", "w"), तो पहले उदाहरण में यह एक फ़ाइल /my_fileऔर दूसरी फ़ाइल बनाएगी /home/user/space/my_file

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.