সিস্টেমড সার্ভিস ইউনিটে ভার্চুয়ালেনভ কীভাবে সক্ষম করবেন?


87

আমি একটি সিস্টেমযুক্ত পরিষেবা ফাইলের মধ্যে একটি ভার্চুয়ালেনভকে "সক্রিয়" করতে চাই।

আমি সিস্টেমড প্রক্রিয়া এবং পাইথন ইন্টারপ্রেটারের মধ্যে শেল প্রক্রিয়া এড়াতে চাই।

আমার বর্তমান সমাধানটি এর মতো দেখাচ্ছে:

[Unit]
Description=fooservice
After=syslog.target network.target

[Service]
Type=simple
User=fooservice
WorkingDirectory={{ venv_home }}
ExecStart={{ venv_home }}/fooservice --serve-in-foreground
Restart=on-abort
EnvironmentFile=/etc/sysconfig/fooservice.env

[Install]
WantedBy=multi-user.target

/etc/sysconfig/fooservice.env

PATH={{ venv_home }}/bin:/usr/local/bin:/usr/bin:/bin
PYTHONIOENCODING=utf-8
PYTHONPATH={{ venv_home }}/...
VIRTUAL_ENV={{ venv_home }}

তবে আমার সমস্যা হচ্ছে। সিস.পাথের কয়েকটি এনটিএস অনুপস্থিত থাকায় আমি আমদানি ত্রুটিগুলি পেয়েছি।


আপনি যে ত্রুটিগুলি পাচ্ছেন তা দয়া করে অন্তর্ভুক্ত করতে পারেন?
প্রবীণ ইয়ালাগানডুলা

@ প্রবীণইয়ালাগানডুলা ট্রেসব্যাকটিতে কোনও কার্যকর তথ্য নেই, যেহেতু আমদানি ব্যতিক্রম ব্যতিক্রম এবং এর উপরে সমস্ত লাইনে কেবলমাত্র কাস্টম কোড রয়েছে যা এখানে গুরুত্বপূর্ণ নয়।
গেটলি

উত্তর:


117

ভ্যুচুয়ালেনভকে "ভার্চুয়ালেনভের পাইথন ইন্টারপ্রেটারে বেকড করা হয়েছে"। এর অর্থ হল আপনি এই ভার্চুয়ালনেভে pythonবা console_scriptsসরাসরি চালু করতে পারেন এবং প্রথমে ভার্চুয়ালেনভকে সক্রিয় করতে বা PATHনিজেকে পরিচালনা করার দরকার নেই :

ExecStart={{ venv_home }}/bin/fooservice --serve-in-foreground

বা

ExecStart={{ venv_home }}/bin/python {{ venv_home }}/fooservice.py --serve-in-foreground

এবং EnvironmentFileএন্ট্রি সরান ।

এটি সত্যই যাচাই করার জন্য আপনি sys.pathচালিয়ে যাচাই করতে পারেন

{{ venv_home }}/bin/python -m site

এবং আউটপুট তুলনা

python -m site

4
ভাল পয়েন্ট নীল। বিটিডব্লু, fooservice.py ভেন্ভ_হোম ডিরেক্টরিটির ভিতরে থাকা কোনও বোধগম্য নয়, আমি মনে করি এটি প্রশ্নের মধ্যে একটি টাইপ রয়েছে।
স্টিলিওস

4
নোট করুন প্রস্তাবিত প্রিন্ট কমান্ডগুলি পাইথন ৩ এর সাথে সামঞ্জস্যপূর্ণ নয় আপনি যদি কমপক্ষে পাইথন ২.৪ ব্যবহার করেন তবে আপনি বিকল্পভাবে python -m siteসিস.পাথ ভেরিয়েবলের সুন্দর বিন্যাসিত আউটপুট পেতে অতিরিক্ত তথ্য ব্যবহার করতে পারেন ।
মার্ক এডিংটন

4
ঝরঝরে, আমি জানতাম না python -m site। আমি আমার উত্তর সামঞ্জস্য করেছি।
নীলস ওয়ার্নার

4
@ নিলস ওয়ার্নার আমি শেল তৈরি করে সমাধানের কাজ শেষ করেছি, উবুন্টু ১..১০ : গিথুব.মামসিআর / পিসিসিআর / ডিপ্লোয় / ব্লব / মাস্টার / অ্যান্সিবল / ফাইলস / .......... এ জিনজা ২ টেম্প্লেটিং উপেক্ষা করুন, দয়া করে এটি উপেক্ষা করুন মোতায়েনের সময় সঠিকভাবে প্রসারিত হয়।
মস্তিষ্কে

6
ভাবছেন এই ninja2 হয় .... না, তাদের জন্য ডবল কোঁকড়া-ধনুর্বন্ধনী শুধু প্লেসহোল্ডার ওপি উদ্ভাবিত আছেন: superuser.com/questions/1209919/...
ankostis

12

লাইব্রেরিগুলির জন্য পথটি সত্যই ভার্চুয়ালেনভের অজগর দোভাষীকে বেকড করার সময় আমার কাছে পাইথন সরঞ্জামগুলির সাথে সমস্যা হয়েছিল যা সেই ভার্চুয়ালেনভে বাইনারি ইনস্টল করা ছিল। উদাহরণস্বরূপ, আমার অ্যাপাচি এয়ারফ্লো পরিষেবাটি কাজ করবে না কারণ এটি gunicornবাইনারিটি খুঁজে পাচ্ছে না। এটির কাজ করার জন্য, এখানে ExecStartএকটি Environmentনির্দেশিকা সহ আমার নির্দেশনাটি (যা কেবল পরিষেবার জন্য পরিবেশের পরিবর্তনশীল সেট করে)।

ExecStart={{ virtualenv }}/bin/python {{ virtualenv }}/bin/airflow webserver
Environment="PATH={{ virtualenv }}/bin:{{ ansible_env.PATH }}"

ExecStartস্পষ্টতই ভার্চুয়ালেনভের অজগর দোভাষী ব্যবহার করে। আমি একটি PATHভেরিয়েবলও যুক্ত করছি , যা সিস্টেমের আগে ভার্চুয়ালেনভের বাইনারি ফোল্ডার যুক্ত করে PATH। এইভাবে, আমি বাইনারিগুলির সাথে কাঙ্ক্ষিত পাইথন লাইব্রেরিগুলি পাই।

নোট করুন যে আমি এই পরিষেবাটি তৈরি করতে জবাবদিহি ব্যবহার করছি, জিনজা 2 এর কোঁকড়া ধনুর্বন্ধনী বন্ধন করা।


1

আমি ভার্চুয়ালেনভ নয় বরং পাইএনভ ব্যবহার করছি: এখানে কেবল শেবাংয়ের আসল।

উদাহরণস্বরূপ: পাইয়ানভ ব্যবহারকারীর মর্টেনবের জন্য ফ্লাস্ক-প্রোড সক্রিয় করুন যা প্রোডে চলছে

/home/mortenb/.pyenv/versions/flask-prod/bin/python --version
Python 3.6.2

তারপরে সিস্টেমেড *। থেকে শুরু হওয়া আমার ফ্লাস্ক স্ক্রিপ্টগুলিতে আমি নীচের শেবাং যুক্ত করছি:

#!/home/mortenb/.pyenv/versions/flask-prod/bin/python3

0

আমার ক্ষেত্রে আমি উদাহরণস্বরূপ, ফ্লাস্কের জন্য প্রয়োজনীয় পরিবেশের ভেরিয়েবলগুলি যুক্ত করার চেষ্টা করেছি

[Service]
Environment="PATH=/xx/yy/zz/venv/bin"
Environment="FLASK_ENV=development"
Environment="APP_SETTINGS=config.DevelopmentConfig"

আমি ভার্চুয়ালেনভ ব্যবহার করছিলাম তাই /xx/yy/zz/venv/binভ্যুচুয়ালেনভ ফোল্ডারের পথও।

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