সিস্টেমডি এন প্রসেস স্প্যান করেছে?


13

আমার সংস্থায়, আমাদের বেশ কয়েকটি কিউ গ্রাহক কর্মী প্রক্রিয়া রয়েছে। আমরা বর্তমানে সেগুলি পরিচালনা করতে সুপারভাইজারডি ব্যবহার করছি, তবে সেখানে নির্দিষ্ট সুবিধার জন্য যদি সম্ভব হয় সিস্টেমডি ব্যবহার করতে চাই। আমি কাস্টম ইউনিট লেখার সাথে মোটামুটি অভিজ্ঞ, তবে এর জন্য সিস্টেমডি ল্যান্ডে আমার তাত্ক্ষণিকভাবে কোনও এনালগ নেই।

ইন SupervisorD ডকুমেন্টেশন একটি প্যারামিটার নামক numprocsবিস্তারিত কোনটি প্রসেস তারা চাই সেবা দিয়ে শুরু করা সংখ্যা সেট করতে পারবেন হয়। যদি আমি 30 টি প্রক্রিয়া শুরু করতে চাই তবে এটি এক-লাইন পরিবর্তন।

সিস্টেমডি ইউনিটগুলিতে কি এমন একটি সেটিংস রয়েছে যা আমাকে এই প্রসেসগুলির মধ্যে কতটি শুরু করতে চাই তা নির্দিষ্ট করার অনুমতি দেবে?


1
আপনি কি একই ইউনিটের একাধিক উদাহরণ তৈরি করার চেষ্টা করছেন? যদি তা হয় তবে আপনি 0pointer.de/blog/projects/inferences.html
মুনির

উত্তর:


31

মুনির যা উল্লেখ করেছেন তা হ'ল আপনি কীভাবে তা করেন। মূলত আপনি একটি serviceফাইল তৈরি করেন এবং এটি 30 বার শুরু করেন। এখন এটি কিছুটা অস্বাস্থ্যকর বলে মনে হতে পারে তবে এর সুবিধাগুলি রয়েছে যেমন খারাপ ব্যবহার করা হলে তাদের মধ্যে একটি বন্ধ করে দিতে সক্ষম হওয়া এবং সেগুলি বন্ধ করে দিতে হবে না। পরিচালনা সহজ করার জন্য আপনি করতে পারেন এমন কিছু জিনিসও রয়েছে।

প্রথমত, ইউনিট ফাইল। যেমন একটি ফাইল তৈরি করুন /etc/systemd/system/test@.service। গুরুত্বপূর্ণ বিট @প্রতীক।

এটির বিষয়বস্তুগুলি দেখতে দেখতে এইরকম হতে পারে:

[Service]
ExecStart=/bin/sleep 600 %I

[Install]
WantedBy=multi-user.target

তারপর সহযোগে এটি আরম্ভ systemctl start test@1.service, systemctl start test@2.service
যে প্রক্রিয়াগুলি চালু হবে সেগুলি দেখতে পাবেন:

root     17222  19   0  0.0  0.0 Ss         00:05 /bin/sleep 600 1
root     17233  19   0  0.0  0.0 Ss         00:02 /bin/sleep 600 2

লক্ষ্য করুন যে আপনি এটি শুরু %Iকরার পরে যা কিছু রেখেছিলেন তার সাথে প্রতিস্থাপিত @হয়ে গেছে।

আপনি সামান্য শেল-ফু দিয়ে সমস্ত 30 টি শুরু করতে পারেন:

systemctl start test@{1..30}.service

আপনি যে কোনো স্বাভাবিক SERVICE এর মতো বুটে সেগুলিকে সক্ষম করতে পারেন: systemctl enable test@1.service

 

এখন পরিচালনাটি সহজ করার জন্য আপনি যা করতে পারেন তার দ্বারা আমি কী বোঝাতে চাইছি: সম্ভবত আপনি test@{1..30}.serviceসেগুলি পরিচালনা করার জন্য ব্যবহার করতে চান না । এটি কিছুটা অনস্বাস্থ্যের। পরিবর্তে আপনি আপনার পরিষেবার জন্য একটি নতুন লক্ষ্য তৈরি করতে পারেন।

এর সাথে তৈরি করুন /etc/systemd/system/test.target:

[Install]
WantedBy=multi-user.target

তারপরে /etc/systemd/system/test@.serviceএমনটি সামঞ্জস্য করুন যাতে এটি দেখতে লাগে:

[Unit]
StopWhenUnneeded=true

[Service]
ExecStart=/bin/sleep 600 %I

[Install]
WantedBy=test.target

সিস্টেমে পুনরায় লোড করুন systemctl daemon-reload(কেবলমাত্র প্রয়োজনীয় যদি আপনি ইউনিট ফাইলটি সংশোধন করছেন, এবং এর পূর্ববর্তী সংস্করণটি এড়িয়ে যান না)। এবং এখন আপনি যে পরিষেবাগুলি পরিচালনা করতে চান তা সক্ষম করে নিন systemctl enable test@{1..30}.service
(আপনি পূর্বে পরিষেবাটি থাকা অবস্থায় সক্ষম করে থাকলে WantedBy=multi-user.targetনির্ভরতা পরিষ্কার করার জন্য প্রথমে এটি অক্ষম করুন)

আপনি এখন কি করতে পারেন systemctl start test.targetএবং systemctl stop test.target, এবং এটি শুরু হবে / সব 30 প্রসেস বন্ধ।
এবং আবার আপনার যদি অন্য কোন ইউনিট ফাইল মত বুটে সক্ষম করতে পারবেন: systemctl enable test.target


এই বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ, আমি বেশ কয়েক দিন ধরে এটি অনুসন্ধান করেছিলাম।
আরনোলেম

1
আপনি কি জানেন যে এটি যদি ব্যর্থ হওয়া প্রক্রিয়াগুলি পুনরায় চালু করবে?
বেসটিয়ান

@ বাসস্টিয়ান: আপনি ব্যবহার করতে পারেন Restart=on-failuresystemd.serviceআরও জন্য ম্যান পৃষ্ঠা পড়ুন ।
স্যারাইড

1

পাইগন স্ক্রিপ্ট ব্যবহার করে আমার উদাহরণটি যা একটি ভার্চুয়ালেনভে চলে:

/etc/systemd/system/my-worker@.service

[Unit]
Description=manages my worker service, instance %i
After=multi-user.target

[Service]
PermissionsStartOnly=true
Type=idle
User=root
ExecStart=/usr/local/virtualenvs/bin/python /path/to/my/script.py
Restart=always
TimeoutStartSec=10
RestartSec=10

অক্ষম করুন: sudo systemctl enable my-worker\@{1..30}.service

এন কর্মীদের সক্ষম করুন: sudo systemctl enable my-worker\@{1..2}.service

পুনরায় লোড করুন: sudo systemctl daemon-reload

শুরু করুন: sudo systemctl start my-worker@2.service

অবস্থা পরীক্ষা: sudo systemctl status my-worker@1

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