আমি আমার সিস্টেমে ইউনিট ফাইলটি কোথায় রাখব?


59

আমি পড়েছি যে ইউনিট ফাইলের জন্য দুটি ফোল্ডার রয়েছে (ব্যবহারকারী মোডে নেই)।

/usr/lib/systemd/system/: units provided by installed packages
/etc/systemd/system/: units installed by the system administrator

এই বোঝার সাথে দ্বন্দ্ব নিম্নলিখিত উত্তর: https://unix.stackexchange.com/a/47715/33386 । কেউ কি অনুপস্থিত তথ্য পূরণ করতে পারে যাতে আমি বুঝতে পারি যে কী চলছে? ( আপডেট: উত্তর আপডেট করা হয়েছে, এবং আমার বোঝার সাথে এটি আর বিরোধ নয় ))

এছাড়াও, মনে হয় যে স্ক্রিপ্টগুলি /etc/systemd/system/ফোল্ডারের মধ্যে সাবফোল্ডারগুলিতে সংগঠিত হয়েছে :

getty.target.wants
multi-user.target.wants

অন্য একটি জায়গায় আমি পড়লাম যে অন্যান্য লোকেশন রয়েছে। মনে হয় এগুলি ব্যবহারকারী-নির্দিষ্ট পরিষেবার জন্য।

/usr/lib/systemd/user/ where services provided by installed packages go.
/etc/systemd/user/ where system-wide user services are placed by the system administrator.
~/.config/systemd/user/ where the user puts its own services.

আপডেট 2015-08-31:

অন্যের স্বার্থে, আমি সম্প্রতি জিজ্ঞাসা করা একটি সম্পর্কিত প্রশ্নের এখানে একটি লিঙ্ক: আমি সিস্টেমড ইউনিটগুলি দ্বারা সম্পাদিত স্ক্রিপ্টগুলি কোথায় রাখি?


4
/etc/systemd/systemআপনি যেখানে আপনার স্ক্রিপ্টগুলি রেখেছেন, প্যাকম্যান প্যাকেজ স্ক্রিপ্টগুলি রাখে /usr/lib/systemd/systemএবং জারি systemctl enable foo.serviceকরে /usr/etc
প্রতিলিঙ্ক

1
দেখুন man systemd.target: এটি গ্রুপিংয়ের পিছনে যুক্তি ব্যাখ্যা করে।
জেসনওয়ারিয়ান

উত্তর:


57

সিস্টেম ইউনিট ফাইলগুলি রাখার সর্বোত্তম জায়গা : /etc/systemd/system [ইনস্টল] বিভাগের অধীনে একটি লক্ষ্য যুক্ত করার বিষয়ে নিশ্চিত হন, "এটি কীভাবে জানবে?" পড়ুন বিস্তারিত জানার জন্য. আপডেট : /usr/local/lib/systemd/systemআরেকটি বিকল্প, বিশদগুলির জন্য "গ্রে এরিয়া" পড়ুন।

ব্যবহারকারীর ইউনিট ফাইলগুলি রাখার সর্বোত্তম জায়গা : /etc/systemd/user বা $HOME/.config/systemd/user এটি অনুমতি এবং পরিস্থিতির উপর নির্ভর করে।

সত্যটি হ'ল সিস্টেমড ইউনিটগুলি (বা অন্তর্ভুক্ত বাক্যটি তাদের হিসাবে "ইউনিট কনফিগারেশন" বলে) যে কোনও জায়গায় যেতে পারে - আপনি ম্যানুয়াল সিমলিংক তৈরি করতে ইচ্ছুক হন এবং আপনি সতর্কতা অবগত হন। এটি ইউনিট স্থাপন করা জীবনকে আরও সহজ করে তোলে যেখানে systemctl daemon-reloadকিছু ভাল কারণে এটি খুঁজে পেতে পারে:

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

এটা কিভাবে জানবে?

এবং ঠিক কীভাবে systemctl enableজানতে পারে কোথায় সিমলিংক তৈরি করবেন? আপনি [install]বিভাগটির অধীনে নিজেই এটিকে হার্ড কোড করুন । সাধারণত এখানে একটি লাইন থাকে

[Install]
WantedBy = multi-user.target

যা ফাইল সিস্টেমের একটি পূর্বনির্ধারিত জায়গার সাথে মিলে যায়। এইভাবে, systemctlজেনে রাখুন যে এই ইউনিটটি ইউনিট ফাইলগুলির একটি গ্রুপের উপর নির্ভরশীল multi-user.target("টার্গেট" ইউনিট নির্ভরতা গ্রুপগুলি মনোনীত করার জন্য ব্যবহৃত শব্দটি You আপনি সমস্ত গ্রুপকে তালিকাভুক্ত করতে পারেন systemctl list-units --type target)। একটি লক্ষ্য সহ লোড করা ইউনিট ফাইলগুলির গ্রুপকে একটি targetname.target.wantsডিরেক্টরিতে স্থাপন করা হয়। এটি সিমলিংক (বা আসল জিনিস) পূর্ণ একটি ডিরেক্টরি। আপনার যদি [Install]অধ্যায় বলছেন এটা , কিন্তু যদি এটি একটি সিমবলিক লিঙ্ক বিদ্যমান নেই ডিরেক্টরি, তাহলে এটি লোড করবে না। যখন সিস্টেমড ইউনিট জেনারেটরগুলি বুট-এ নির্ভরতা গাছের ক্যাশে আপনার ইউনিট ফাইল যুক্ত করে (আপনি নিজে জেনারেটরগুলি দিয়ে জেনারেটরগুলি ট্রিগার করতে পারেন ) তখন স্বয়ংক্রিয়ভাবে জেনে যায় ডিরেক্টরিতে সিমলিংকটি কোথায় রাখা উচিত putWantedBymulti-user.targetmulti-user.target.wantssystemctl daemon-reload/etc/systemd/system/multi-user.target.wants/ আপনি এটি সক্ষম করা উচিত

ম্যানুয়ালে মূল পয়েন্টগুলি:

অতিরিক্ত ইউনিটগুলি ইউনিট লোডের পথে নয় ডিরেক্টরিগুলি থেকে systemd ("সংযুক্ত") এ লোড হতে পারে। Systemctl (1) এর জন্য লিঙ্ক কমান্ডটি দেখুন।

Systemctl এর অধীনে, ইউনিট ফাইল কমান্ডগুলি সন্ধান করুন

ইউনিট ফাইল লোডের পথ

নীচের দুটি সারণীতে বর্ণিত সংকলনের সময় নির্ধারিত পাথের সেট থেকে ইউনিট ফাইলগুলি লোড করা হয়। আগের তালিকাভুক্ত ডিরেক্টরিগুলিতে পাওয়া ইউনিট ফাইলগুলি তালিকাতে নীচের ডিরেক্টরিতে একই নামের ফাইলগুলি ওভাররাইড করে।

যখন ভেরিয়েবল $SYSTEMD_UNIT_PATHসেট করা থাকে, তখন এই ভেরিয়েবলের সামগ্রীগুলি ইউনিট লোড পাথকে ওভাররাইড করে। যদি $SYSTEMD_UNIT_PATHএকটি খালি উপাদান (":") দিয়ে শেষ হয়, সাধারণ ইউনিট লোড পাথটি ভেরিয়েবলের বিষয়বস্তুতে সংযুক্ত করা হবে।

সারণী 1 এবং সারণী 2 থেকে man systemd.unitভাল।

সিস্টেম মোডে চলমান অবস্থায় পাথগুলি লোড করুন ( --system)।

  • /etc/systemd/system স্থানীয় কনফিগারেশন
  • /run/systemd/system রানটাইম ইউনিট
  • /usr/lib/systemd/system ইনস্টল করা প্যাকেজগুলির ইউনিট

ব্যবহারকারী মোডে চলার সময় পাথ লোড করুন ( --user)

প্রতি ব্যবহারকারী ইউনিট এবং সমস্ত / বিশ্বব্যাপী ব্যবহারকারী এককের মধ্যে পার্থক্য রয়েছে ।

ব্যবহারকারী-নির্ভরশীল

  • $XDG_CONFIG_HOME/systemd/user ব্যবহারকারীর কনফিগারেশন (কেবল তখন $XDG_CONFIG_HOMEসেট করা থাকে)
  • $HOME/.config/systemd/user ব্যবহারকারীর কনফিগারেশন (শুধুমাত্র $XDG_CONFIG_HOMEসেট না থাকলে ব্যবহৃত হয়)
  • $XDG_RUNTIME_DIR/systemd/user রানটাইম ইউনিট (শুধুমাত্র $XDG_RUNTIME_DIRসেট করা থাকলে ব্যবহৃত হয়)

  • $XDG_DATA_HOME/systemd/user হোম ডিরেক্টরিতে প্যাকেজগুলির ইউনিটগুলি ইনস্টল করা হয়েছে (কেবল যখন $XDG_DATA_HOMEসেট করা হয় তখন ব্যবহৃত হয়)

  • $HOME/.local/share/systemd/user হোম ডিরেক্টরিতে প্যাকেজগুলির ইউনিটগুলি ইনস্টল করা হয়েছে (কেবল $XDG_DATA_HOMEসেট না থাকলেই ব্যবহৃত হবে )

--global (সকল ব্যবহারকারী)

ইউনিটগুলি যা সমস্ত ব্যবহারকারীর জন্য প্রযোজ্য - যার অর্থ প্রতিটি ব্যবহারকারীর মালিকানাও রয়েছে। সুতরাং প্রশাসক বুট-এ সক্ষম করলেও প্রতিটি ব্যবহারকারী এই পরিষেবাগুলি বন্ধ করতে পারেন।

  • /etc/systemd/user সমস্ত ব্যবহারকারীর জন্য স্থানীয় কনফিগারেশন ( systemctl --global enable userunit.service)
  • /usr/lib/systemd/user সমস্ত ব্যবহারকারীর জন্য সিস্টেম-ওয়াইড ইনস্টল করা প্যাকেজগুলির ইউনিটগুলি
  • /run/systemd/user রানটাইম ইউনিট

ধূসর এলাকা

একদিকে, ফাইল হায়ারার্কি স্ট্যান্ডার্ড নির্দিষ্ট করে যেগুলি /etcস্থানীয় কনফিগারেশনের জন্য যা বাইনারিগুলি কার্যকর করে না। অন্যদিকে এটি নির্দিষ্ট করে যে /usr/local/"স্থানীয়ভাবে সফ্টওয়্যার ইনস্টল করার সময় সিস্টেম প্রশাসক ব্যবহারের জন্য"। আপনি যুক্তিও দিতে পারেন (কেবল সংস্থার উদ্দেশ্যে নয়) সমস্ত সিস্টেম ইউনিট ফাইলগুলির আওতাভুক্ত হওয়া উচিত /usr/local/lib/systemd/systemতবে এটি ইউনিট ফাইলগুলির জন্য যা "সফ্টওয়্যার" এর অংশ যা প্যাকেজ ম্যানেজারের নয় not সংশ্লিষ্ট সিস্টেমড ব্যবহারকারী ইউনিটগুলি যেগুলি সিস্টেম-প্রশস্ত রয়েছে এর অধীনে যেতে পারে /usr/local/lib/systemd/user


ইউনিট ফাইলগুলি রাখার বিষয়ে পরামর্শ /etc/systemd/system, স্ব-নির্মিত ইউনিট ফাইলগুলির জন্য সাধারণ পরামর্শ? প্যাকেজ ম্যানেজারের দ্বারা ইনস্টল করা যেকোনো কিছুতে এগুলি সর্বদা /usr/lib/systemd/systemউদাহরণস্বরূপ রাখা উচিত ।
SLM

@ এসএলএম হ্যাঁ, যখন প্রশ্নটি আমার সিস্টেমড ইউনিট ফাইলগুলিকে বোঝায়, তখন এটি স্ব-নির্মিত তৈরিগুলি বোঝানো is
জোনাথন কোমার

আমি আলাদা করব: /etc/systemd/user(গ্যারান্টিযুক্ত) সিস্টেমের জন্য প্রশস্ত ব্যবহারকারী পরিষেবা এবং ~/.config/systemd/userকাস্টম ব্যবহারকারী নির্দিষ্ট পরিষেবার জন্য।
সুয়েহেগি

16

/etc/systemd/systemযেখানে আপনি আপনার স্ক্রিপ্টগুলি রেখেছেন , প্যাকম্যান প্যাকেজ স্ক্রিপ্টগুলিতে রাখে /usr/lib/systemd/system

ইস্যু করা systemctl enable foo.serviceথেকে প্রতিলিপি তৈরি /usrকরে /etc। আরও বিশদের জন্য ইউনিট লোড পাথ বিভাগটি man systemd.unit(5)দেখুন।


@ ম্যাকমডনেস it's৮ এটি অনুপস্থিত কারণ এটি প্রশ্নের সাথে সম্পর্কিত নয়।
জেসনওয়ারিয়ান

1

আমি 3 লিখেছি, একটির জন্য ntpd, একটি সেকেন্ডের জন্য, স্ট্যাটিক ইথারনেট কার্ড এবং একটি চালানোর জন্য p0f, প্যাসিভ ওএস সনাক্তকারী। আমি তাদের সব putুকিয়ে দিয়েছি /etc/systemd/system। দেখে মনে হচ্ছে যে আমি সম্ভবত systemdএনটিপি জিনিসগুলি হ্যান্ডেল করতে পারি, তবে আমি মনে করি না যে আমি এটির উপরে এত বেশি নির্ভর করতে চাই।

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