[এটি systemd-tmpfiles এর সমস্যাটিকে সরাসরি সমাধান করে না তবে আমি মনে করি আপনি ইতিমধ্যে বুঝতে পেরেছেন যে এই বিশেষ ক্ষেত্রে আপনি কেবল প্রতিধ্বনি ব্যবহার করা থেকে ভাল]
প্রথমত, "মাল্টি-ইউজার.আরগারেট" আপনি যা ব্যবহার করতে চান তা নাও হতে পারে। আপনি যদি এসআইএসভি স্টাইল ডিআইডি স্টাফ থেকে রানলেভেলের ধারণার সাথে পরিচিত হন তবে মাল্টি-ইউজারটি রানলেভেল 3 এর সিস্টেমড সমতুল্য, এটি একটি মাল্টি-ইউজার সিস্টেম যা কোনও কনসোলকে বুট করে, জিইউআই নয়। রানলেভেল 5 এর সমতুল্য, যা এক্সে বুট করে, গ্রাফিকাল.আরটিজেট । ডিফল্ট একটি ডিফল্ট নির্ধারিত হয় /etc/systemd/system
(এবং / অথবা /lib/systemd/system
; যেটি এতে একটিকে /etc
ওভাররুল করে দেবে /lib
) তাকে ডিফল্ট.আর্টেজ বলে , এটি কোথায় নির্দেশ করে তা খুঁজে পেতে ls ব্যবহার করুন:
»ls -l /etc/systemd/system/default.target
default.target -> /usr/lib/systemd/system/multi-user.target
সাধারণ লিনাক্স ডেস্কটপগুলির জন্য এটি গ্রাফিকাল.আরটিজেট হবে। ডিফল্ট রানলেভেল / টার্গেট কি তা বিবেচনা না করেই আপনি যে বুট পরিষেবাটি তৈরি করছেন তা শুরু করতে চাইলে এটি বাস্তবে গুরুত্বপূর্ণ নয় - সেক্ষেত্রে আমরা কেবল ডিফল্ট.আরগেট ব্যবহার করতে পারি, এবং এটির জন্য একটি উপনাম কী তা চিন্তা করবেন না। তবে আপনি যদি মাল্টি-ইউজার ব্যবহার করেন এবং আপনার ডিফল্ট গ্রাফিকাল হয় তবে আপনার পরিষেবাটি ঘটবে না।
পরিষেবার উপর নির্ভর করে, আরও উপযুক্ত এবং সুনির্দিষ্ট লক্ষ্য বা পরিষেবাদি থাকতে পারে যা আপনি এই সম্পর্কিতটি শুরু করতে চান। আপনার অন্যান্য প্রশ্নের উপর ভিত্তি করে, default.target সম্ভবত ভাল। একটি নোট হিসাবে, একটি "লক্ষ্য" এবং "পরিষেবা" এর মধ্যে পার্থক্য হ'ল একটি পরিষেবাদিতে একটি [Service]
বিভাগ রয়েছে যা প্রকৃতপক্ষে একটি প্রক্রিয়া চালায়; একটি লক্ষ্য হ'ল বিভিন্ন "নির্ভরশীল" এবং "প্রয়োজনীয়" নির্দেশের মাধ্যমে একসাথে পরিষেবাদি গোষ্ঠীকরণের একটি উপায়; এটি অন্যান্য লক্ষ্য বা পরিষেবাগুলি ট্রিগার করার বাইরে নিজস্ব কিছু করে না।
যখন কোনও পরিষেবা শুরু হয় তখন নির্ধারিত হয় অন্যান্য পরিষেবাদি কীভাবে এর উপর নির্ভর করে। বুট প্রসেসে আমরা দেরি করে চালাতে চাই এর মতো একটি সাধারণ, একা একা ইভেন্টের ক্ষেত্রে, আমরা এই নির্দেশের সংমিশ্রণটি ব্যবহার করতে পারি:
[Unit]
After=default.target
[Install]
WantedBy=default.target
পরিষেবা ইনস্টল করার সময় "ইনস্টল" বিভাগটি ব্যবহৃত হয়; "ওয়ান্টেডবি" একটি লক্ষ্য নির্দিষ্ট করে যে আমরা এই পরিষেবাটি অন্তর্ভুক্ত করতে চাই (অর্থাত্ যদি সে লক্ষ্যটি চালিত হয় তবে এটি চলবে, তবে এনবি। এটি কখন অন্যের সাথে সম্পর্কযুক্ত হবে তা নির্ধারণ করে না )। যেহেতু আমরা প্রকৃতপক্ষে এই পরিষেবাটি তাড়াতাড়ি না হয়ে পরে চালানো চাই, তাই আমরা একটি "পরে" ধারাটি নির্দিষ্ট করি। এটি প্রকৃতপক্ষে ওয়ান্টডবাই টার্গেটের মতো হওয়ার দরকার নেই (এটি সাধারণত হয় না) এবং এটি যখন ঘটে তখন যত্ন না করে পুরোপুরি বাদ দেওয়া যেতে পারে; আমি কেবল এটি হান্টে ব্যবহার করছি যে অন্য কিছু স্টাফের সাথে চালিত হবে Before=default.target
যা নির্দিষ্ট জায়গায় নির্দিষ্টভাবে বেঁধে রাখা হয়েছে (যা আমরা ব্যবহার করতে পারতাম; লক্ষ্যটি চালানোর আগে একটি টার্গেটের চাওয়াগুলি মূল্যায়ন করা হয়)।
উদাহরণস্বরূপ, আমি কনসোলে কেবল "হ্যালো ওয়ার্ল্ড" প্রতিধ্বনি করব। পরিষেবাটি নিজেই [Service]
বিভাগে বর্ণিত হয়েছে :
[Service]
Type=forking
ExecStart=/usr/local/bin/helloworld
কমান্ডটির একটি পূর্ণ পথ প্রয়োজন। যে কারণটি আমি কেবল ব্যবহার করি নি তা /usr/bin/echo "hello world"
হ'ল এটি কাজ করবে না (আউটপুটটি / dev / নাল যায়, আমি মনে করি), এবং একটি পরিষেবা যা একটি echo "hello world" > /dev/console
উইল করে তা পরীক্ষা-নিরীক্ষায় প্রমাণিত হয় যে এক্সিকিস্টার্ট নির্দেশিকায় শেল পুনর্নির্দেশটি ব্যবহার করা যাবে না । সুতরাং / usr / স্থানীয় / বিন / হেলিওর্ল্ড হ'ল একটি লাইন সহ শেল স্ক্রিপ্ট echo "hello world" > /dev/console
,।
Type=forking
শেল স্ক্রিপ্টের জন্য প্রয়োজনীয় যা নোট করুন ।
আমাদের সম্পূর্ণ, ন্যূনতম সেবা ফাইল ঠিক ঐ তিনটি বিভাগে আছে ( [Unit]
, [Service]
, এবং [Install]
)। ইনস্টল করার জন্য, ফাইল / এটিকে / etc / systemd / system অথবা / usr / lib / systemd / system এবং এর মধ্যে একটি সিমিলিংক রাখুন এবং:
systemctl --system enable helloworld
এটি মুদ্রণ করা উচিত ln -s ...
। এটি পরিষেবাটি চালায় না, এটি কেবল উপরের আলোচনা অনুসারে বুট চালানোর জন্য এটি কনফিগার করে।
সংক্ষেপে এটি। man systemd.unit
এবং man systemd.service
আরও বিশদ আছে।