সিস্টেমড ব্যবহার করে ভার্চুয়ালেনভের ভিতরে কীভাবে একটি কমান্ড চালানো যায়


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/করা।

আপনি যদি ভার্চুয়ালেনভের ব্যবহারের নথিটি দেখেন তবে আপনি এটি লক্ষ্য করবেন:

ENV/binতৈরি করা হয়, যেখানে এক্সিকিউটেবলগুলি থাকে - লক্ষণীয়ভাবে একটি নতুন অজগর । সুতরাং এই স্ক্রিপ্ট দিয়ে #! /path/to/ENV/bin/pythonএই স্ক্রিপ্টটি এই ভার্চুয়ালেনভের অজগরটির অধীনে চালানো হবে।

অন্য কথায়, ধরে crossbarনেওয়া যে আপনি যে পাইথন স্ক্রিপ্টটি চালাতে চান তার জন্য venv-apভার্চুয়ালেনভের দরকার হয় , কেবল এটি দিয়ে শুরু করুন crossbar:

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

এবং এটি স্বয়ংক্রিয়ভাবে যখনই অনুরোধ করা হবে তখন ভার্চুয়ালেনভ ব্যবহার করবে।

এছাড়াও সম্ভব, ভ্যাচুয়ালেভ থেকে সরাসরি পাইথন দোভাষীকে অনুরোধ করে:

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

(এছাড়াও, একটি নির্দিষ্ট ডিরেক্টরিতে চালনার বিষয়ে, কমান্ড WorkingDirectory=/home/debian/apব্যবহারের চেয়ে সেটিংটি ভাল cdYou সেভাবে আপনার কোনও শেল লাগবে না এবং সিস্টেমড আপনার পক্ষে ত্রুটি পরিচালনা করতে আরও ভাল করতে পারে))

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.