সিস্টেমড। সার্ভিস ফাইল চলমান systemd-tmpfiles কীভাবে লিখবেন


16

systemd-tmpfiles --createএকটি সিস্টেমযুক্ত ডিস্ট্রো দিয়ে বুট প্রক্রিয়া চলাকালীন আমাকে চালানো দরকার । সুতরাং এই কাজটি করার জন্য আমার একটি সিস্টেমড। পরিষেবা ফাইল তৈরি করা দরকার।

আমার কী প্রয়োজন এবং কেন: সিস্টেমড-টেম্পফিলস কীভাবে কাজ করে সে সম্পর্কে আপনি এই প্রশ্নটিতে সমস্ত বিবরণ পড়তে পারেন ?

আমি এটি সম্পর্কে কিছু ডক্স পড়েছি এবং আমি নিম্নলিখিত পরীক্ষাটি লিখছি:

[Unit]
Description=Execute tmpfiles to disable usb-wakeup # see details in the link above
Requires=multi-user.target # see details in the link above
After=multi-user.target    # see details in the link above

[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-tmpfiles --create

[Install]
WantedBy=multi-user.target

তবে আমি নিশ্চিত নই, কারণ systemd-tmpfilesএটি কোনও সাধারণ প্রোগ্রাম নয় বরং এটি সিস্টেমডের একটি অংশ। আমি আমার সিস্টেমটি ভাঙতে চাই না।

একটি সঠিক .service ফাইল সম্পর্কে কোনও টিপস?


সিস্টেমডে ফ্রিডেস্কটপ । আপনি নিজের ফাইল দ্বারা সিস্টেমের ডিফল্টগুলিকে ওভাররাইড করতে পারেন।
ভোনব্র্যান্ড

উত্তর:


30

[এটি 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আরও বিশদ আছে।


1
আপনাকে ধন্যবাদ, খুব দরকারী উত্তর এবং সমস্যার সমাধান। কেবল একটি নোট, আমার ডিস্ট্রোতে (চক্র লিনাক্স) default.targetনেই /etc/systemd/system, তবে এটি কেবল এতে রয়েছে/usr/lib/systemd/system

কমান্ডগুলি থেকে আউটপুট লগ হয় (এটি আর কোথায় যেতে পারে)?
ভোনব্র্যান্ড

/ Usr / lib / systemd / ... ফাইলগুলি ফ্যালব্যাক (ডিফল্ট) হয়, আপনি নিজের / etc / systemd / ... এ ফেলে দেবেন বলে মনে করা হচ্ছে
ভোনব্র্যান্ড

এই দিনগুলি default.targetপাওয়া যাবে/lib/systemd/system/default.target
cesrasz

1
@czerasz আমি ফেডোরার ২ on তারিখে লক্ষ্য করেছি, যদি আমি systemctl set-default ...এটিতে একটি সিমিলিংক ফেলে রাখি /etc/systemd/systemতবে এটির মধ্যে কোনও পরিবর্তন হয় না /lib, অর্থাত্ তারা বিভিন্ন লক্ষ্যবস্তুতে নির্দেশ করে তবে পূর্বের জিনিসগুলিকে পরবর্তীটি ওভাররাইড করা উচিত। যদি আপনি নিজেরাই সেট করে থাকেন তবে যা ঘটতে পারে। যাইহোক, আমি উভয় স্থানে সম্পাদনা করেছি।
স্বর্ণলোকস

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