সিস্টেমড বনাম সহজ বনাম?


25

আমি আমার প্রথম systemdইউনিট ফাইল লিখছি ।

জন্য Type, কয়েক পছন্দ আছেন: forking, simple, ইত্যাদি আমি পড়েছি রেডহ্যাট ডকুমেন্টেশন এই বিষয়ে (সারণি 9.9) এ, কিন্তু এখনও নিশ্চিত যখন আমি কোন বিকল্পটি ব্যবহার করা উচিত নই।

কোন গাইডলাইন?

উত্তর:


48

আপনি যখন কমান্ড লাইন থেকে সার্ভিসটি ম্যানুয়ালি শুরু করেন ( ব্যাকগ্রাউন্ডে এটি চালানোর জন্য nohupউপসর্গ কমান্ড বা &প্রত্যয় ব্যবহার না করে , বা অন্য কথায়, কেবল আপনি যে কমান্ডটি ফাইলের ExecStart=লাইনে রেখেছিলেন তা চালান .service), তখন কী ঘটে?

ক) যদি পরিষেবাটি শুরু হয় এবং চলতে থাকে এবং আপনি কন্ট্রোল-সি চাপ না দেওয়া বা অন্য কোনওভাবে পরিষেবা বন্ধ না করা পর্যন্ত প্রম্পটটি ফিরে না আসে: তবে Type = simpleসঠিক পছন্দ।

খ) যদি প্রম্পটটি ফিরে আসে তবে পরিষেবাটি পটভূমিতে চলতে থাকে (অর্থাত্ পরিষেবাটি নিজেরাই নিজেকে ডেমোনাইজ করে), তবে Type = forkingসঠিক পছন্দ।

গ) যদি পরিষেবাটি তার কাজ করে এবং কিছু না চালিয়ে প্রম্পটে প্রত্যাবর্তন করে (অর্থাত্ সার্ভিসটি কিছু কার্নেল সেটিংস সামঞ্জস্য করে, অন্য কোনও ক্ষেত্রে একটি আদেশ প্রেরণ করে বা অনুরূপ কিছু করে) তবে Type = oneshotসম্ভবত সঠিক পছন্দ। এই ক্ষেত্রে, ExecStartপরিষেবার কিছু হতে পারে "সেট" করার আদেশ, এবং ExecStopএটি "আনসেট" করার জন্য সংশ্লিষ্ট কমান্ড। এই ধরণের সাধারণত উপকার হয় RemainAfterExit=true, তাই সিস্টেমটি এই সাম্প্রতিককালে "সেট" বা "আনসেট" ছিল কিনা তা অনুসারে এই পরিষেবার "রাষ্ট্র" এর উপর নজর রাখবে।

অন্যান্য Typeমানগুলি বিশেষ ক্ষেত্রে। উদাহরণস্বরূপ, যদি পরিষেবাটি ডি-বাস সংযোগটি ব্যবহার করে Type = dbusতবে সর্বোত্তম পছন্দ হতে পারে। এটি systemdসত্যটি সচেতন করে তোলে এবং তারপরে সিস্টেমড ডি-বাসে এই পরিষেবার উপস্থিতি দ্বারা এই পরিষেবাটি (এবং এটির উপর নির্ভর করে যে কোনও কিছু) ট্র্যাক করবে।

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

এই বার্তাগুলি প্রেরণের জন্য আপনি ব্যবহার করতে পারেন একটি কমান্ড-লাইন ইউটিলিটি systemd-notifyএবং একটি সি লাইব্রেরির ফাংশন রয়েছে sd_notify(3)তবে সেগুলির কোনওটি যদি আপনার প্রয়োজনীয়তার জন্য উপযুক্ত না হয় তবে আপনি কেবল নিজের বার্তা প্রেরককে প্রয়োগ করতে পারেন। প্রয়োজনীয় বার্তাগুলি খুব সহজ, এবং শেল ভেরিয়েবল অ্যাসাইনমেন্টগুলির মতো দেখায়: উদাহরণস্বরূপ, পরিষেবাটি সফলভাবে স্টার্টআপটি সম্পন্ন হয়েছে এবং যে কোনও আগমন অনুরোধগুলি পরিবেশন করতে প্রস্তুত রয়েছে তা জানাতে, পরিষেবাটি printf "READY=1\n"সকেটের আউটপুটের সমান স্ট্রিংটি প্রেরণ করা উচিত । man 3 sd_notifyস্বীকৃত বার্তাগুলি সম্পর্কে আরও বিশদ জানতে দেখুন ।

দ্রষ্টব্য: অনেকগুলি ইউনিক্স-স্টাইল সিস্টেমগুলিতে বহনযোগ্য হিসাবে নকশাকৃত নকশাকৃত নকশাগুলি ডিফল্টরূপে বি হিসাবে আচরণ করতে পারে তবে এটির মতো কাজ করা যেতে পারে) একটি বিকল্প যুক্ত করে (সাধারণত "কাঁটাচামচা করবেন না" হিসাবে বর্ণনা করা হয়, "চালিয়ে যান অগ্রভাগে "," ডিমনোমাইজ করবেন না "বা অনুরূপ) সেক্ষেত্রে যদি বিকল্পটির অন্য কোনও পার্শ্ব প্রতিক্রিয়া না থাকে তবে বিকল্পটি যুক্ত করে এবং ক) টাইপ ব্যবহারের পক্ষে পছন্দনীয় systemd


ধরুন আমি শুরু করি apache, কোন প্রকারটি ব্যবহার করা উচিত?
কিটিগার্ল

2
আচ্ছা, আপনি কীভাবে এটি ম্যানুয়ালি শুরু করবেন? apachectl startরুট হিসাবে চালিয়ে , সম্ভবত? এটি করার চেষ্টা করুন এবং দেখুন কী ঘটে। তারপরে আমার উত্তর থেকে একটি), খ) বা গ) চয়ন করুন। আমি বাজি ধরব যে প্রম্পটটি ফিরে আসবে এবং অ্যাপাচি চলমান থাকবে, তাই খ) এর উত্তর হবে।
টেলকোম 26'19

আপনি আপনার উত্তরে যে ব্যাখ্যা দিয়েছেন তা আমি সত্যিই পছন্দ করি। আপনি কি মামলার জন্য আরেকটি সরল ইংরেজী ব্যাখ্যা যুক্ত করতে আপত্তি করবেন Type=notify?
ইয়াঙ্কি

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