Systemd का उपयोग करके virtualenv के अंदर कमांड कैसे चलाएं


15

मेरा मानना ​​है कि यह सरल होना चाहिए लेकिन मैं इसे ठीक से काम नहीं कर सकता।

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

cd /home/debian/ap

# Start a virtualenv
source venv-ap/bin/activate

# This needs to happen inside the virtualenv and takes ~20 seconds
crossbar start

# Outside the virtualenv, perhaps in a different command line window
python3 /home/debian/myscript.py

इस क्रम में ये कमांड किए जाने हैं। वर्चुअन, क्रॉसबार के लिए गैर-निष्पादन योग्य और बाद में अलग-अलग अजगर स्क्रिप्ट के कारण, मुझे यह काम करने के लिए सबसे अच्छा तरीका समझ नहीं आया है। मेरी वर्तमान कार्य-प्रगति:

[Unit]
Description=Start CB
After=network.target

[Service]
Type=simple
User=debian
ExecStartPre=source /home/debian/ap/venv-ap/bin/activate
ExecStart=cd /home/debian/ap/ && crossbar start
Restart=always

[Install]
WantedBy=multi-user.target

1
क्या आप इसे अभी तक हल कर सकते हैं? यदि हां, तो कैसे?
काला

जवाबों:


11

यह काम नहीं करता है क्योंकि sourceएक शेल कमांड है, इसलिए systemd ExecStart=या ExecStartPre=उन्हें सीधे समझ नहीं पाएगा ... (BTW, वही इसके लिए सही है cdऔर &&)।

आप स्पष्ट रूप से एक शेल चलाकर और वहां एक साथ अपनी सभी कमांड चलाकर हासिल कर सकते हैं :

ExecStart=/bin/sh -c 'cd /home/debian/ap/ && source venv-ap/bin/activate && crossbar start'

लेकिन एक बेहतर तरीका यह है कि "वर्चुअली" स्क्रिप्ट को सोर्स करने के बजाय, सीधे अपने वर्चुअन के pythonनिष्पादन योग्य का उपयोग करें bin/

यदि आप virtualenv के उपयोग दस्तावेज़ को देखते हैं , तो आप देखेंगे कि यह कहता है:

ENV/binबनाया गया है, जहां निष्पादक रहते हैं - विशेष रूप से एक नया अजगर । इस प्रकार एक स्क्रिप्ट के साथ #! /path/to/ENV/bin/pythonइस स्क्रिप्ट को इस virtualenv के अजगर के तहत चलाया जाएगा।

दूसरे शब्दों में, मान लें crossbarकि पाइथन स्क्रिप्ट जिसे आप चलाना चाहते हैं venv-ap, जो वर्चुअन की आवश्यकता है , बस इसके crossbarसाथ शुरू करें:

#!/home/debian/ap/venv-ap/bin/python

और जब भी इनवॉइस किया जाएगा, तो यह अपने आप virtualenv का उपयोग करेगा।

इसके अलावा, संभव है, सीधे virtualenv से पायथन दुभाषिया को आमंत्रित करना:

ExecStart=/home/debian/ap/venv-ap/bin/python /path/to/crossbar start

(इसके अलावा, एक विशिष्ट निर्देशिका में चलाने के बारे में, कमांड WorkingDirectory=/home/debian/apका उपयोग करने से सेटिंग बेहतर है cd। आपको इस तरह से शेल की आवश्यकता नहीं है, और सिस्टमड आपके लिए बेहतर त्रुटि हैंडलिंग कर सकता है।)

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