আমি আমার প্রথম systemd
ইউনিট ফাইল লিখছি ।
জন্য Type
, কয়েক পছন্দ আছেন: forking
, simple
, ইত্যাদি আমি পড়েছি রেডহ্যাট ডকুমেন্টেশন এই বিষয়ে (সারণি 9.9) এ, কিন্তু এখনও নিশ্চিত যখন আমি কোন বিকল্পটি ব্যবহার করা উচিত নই।
কোন গাইডলাইন?
আমি আমার প্রথম systemd
ইউনিট ফাইল লিখছি ।
জন্য Type
, কয়েক পছন্দ আছেন: forking
, simple
, ইত্যাদি আমি পড়েছি রেডহ্যাট ডকুমেন্টেশন এই বিষয়ে (সারণি 9.9) এ, কিন্তু এখনও নিশ্চিত যখন আমি কোন বিকল্পটি ব্যবহার করা উচিত নই।
কোন গাইডলাইন?
উত্তর:
আপনি যখন কমান্ড লাইন থেকে সার্ভিসটি ম্যানুয়ালি শুরু করেন ( ব্যাকগ্রাউন্ডে এটি চালানোর জন্য 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
।
apachectl start
রুট হিসাবে চালিয়ে , সম্ভবত? এটি করার চেষ্টা করুন এবং দেখুন কী ঘটে। তারপরে আমার উত্তর থেকে একটি), খ) বা গ) চয়ন করুন। আমি বাজি ধরব যে প্রম্পটটি ফিরে আসবে এবং অ্যাপাচি চলমান থাকবে, তাই খ) এর উত্তর হবে।
Type=notify
?
Type=notify
।
apache
, কোন প্রকারটি ব্যবহার করা উচিত?