সিস্টেমড কীভাবে /etc/init.d স্ক্রিপ্ট ব্যবহার করে?


120

আমি স্রেফ ডেবিয়ান জেসিতে স্যুইচ করেছি, এবং আমার গ্রাফিকাল ডিসপ্লে ম্যানেজার সহ বেশিরভাগ জিনিস ঠিকঠাক চলে wdm

বিষয়টি হ'ল, আমি বুঝতে পারি না এটি কীভাবে কাজ করে। স্পষ্টতই আমার /etc/init.d/wdmস্ক্রিপ্টটি বলা হয়, কারণ যখন আমি exitসেখানে প্রথম দিকে রাখি, ডাব্লুডিএম শুরু হয় না। তবে যখন আমি বিকল্পভাবে /etc/rc3.d ডিরেক্টরিটির নাম পরিবর্তন করি (আমার ডিফল্ট রানলেভেলটি 3 ব্যবহৃত হত) তখন wdm এখনও চালু হয়।

সিস্টেম্ড কীভাবে এই স্ক্রিপ্টটি আবিষ্কার করে তা আমি আবিষ্কার করতে পারি না এবং এটি অন্যান্য সমস্ত init.d স্ক্রিপ্টগুলিতে কী করে তা আমি বুঝতে পারি না।

  • কখন এবং কিভাবে সিস্টেমেড init.d স্ক্রিপগুলি চালায়?
  • দীর্ঘমেয়াদে, আমি কি সমস্ত init.d স্ক্রিপ্টগুলি থেকে মুক্তি পাব?

উত্তর:


166

বিশৃঙ্খলার উত্তর কিছু ডকুমেন্টেশন যা বলে। কিন্তু সিস্টেমড আসলে যা করে তা তা নয়। (ভ্যান স্মোরেনবার্গে এটিই rcকরেনি, ভ্যান স্মোরেনবার্গ সম্ভবতrc স্পষ্টতই এলএসবি শিরোনামগুলিকে অগ্রাহ্য করেনি , যা insservশুরুতে স্ট্যাটিক অর্ডারগুলি গণনা করত।) ফ্রিডেস্কটপ ডকুমেন্টেশন যেমন "ইনকোপ্যাটিবেবিলিটিস" পৃষ্ঠাটি আসলে ভুল ছিল, এই এবং অন্যান্য পয়েন্ট। ( HOMEআসলে এনভায়রনমেন্ট ভেরিয়েবল হয় প্রায়ই উদাহরণস্বরূপ সেট,। এই বিলকুল গিয়েছিলাম একটি দীর্ঘ সময়ের জন্য যে কোন জায়গায় অনথিভুক্ত। এটা এখন ম্যানুয়াল নথিভুক্ত হচ্ছে, অন্তত, কিন্তু যে Freedesktop বা WWW পাতা এখনও সংশোধন করা হয়েছে।)

সিস্টেমডের জন্য নেটিভ পরিষেবা ফর্ম্যাটটি হ'ল পরিষেবা ইউনিট । সিস্টেমেড সার্ভিস ম্যানেজমেন্ট যথাযথভাবে কেবল সেইগুলির ক্ষেত্রেই পরিচালনা করে , এটি এটি নয়টি ডিরেক্টরি যেখানে (সিস্টেম-ওয়াইড) .serviceফাইলগুলি থাকতে পারে তার একটি থেকে পড়ে। /etc/systemd/system, /run/systemd/system, /usr/local/lib/systemd/system, এবং /usr/lib/systemd/systemসেই ডিরেক্টরি চার হয়।

ভ্যান স্মোরেনবার্গে rcস্ক্রিপ্টগুলির সাথে সামঞ্জস্যের নামটি রূপান্তর প্রোগ্রামের মাধ্যমে অর্জন করা হয়েছে systemd-sysv-generator। এই প্রোগ্রামটি /usr/lib/systemd/system-generators/ডিরেক্টরিতে তালিকাভুক্ত রয়েছে এবং প্রতিটি বুট-এ বুটস্ট্র্যাপ প্রক্রিয়া শুরুর দিকে সিস্টেমে স্বয়ংক্রিয়ভাবে সঞ্চালিত হয় এবং প্রতিবার যখন সিস্টেমডকে তার কনফিগারেশনটি পরে আবার লোড করার নির্দেশ দেওয়া হয়।

এই প্রোগ্রামটি একটি জেনারেটর , এক প্রকারের আনুষঙ্গিক ইউটিলিটি যার কাজ ফ্লাইতে সার্ভিস ইউনিট ফাইল তৈরি করা, একটি টিএমপিএফ যেখানে nine টি নয়টি ডিরেক্টরিতে (যেটি কেবল জেনারেটর দ্বারা ব্যবহারের উদ্দেশ্যে রয়েছে) এর মধ্যে আরও তিনটি অবস্থিত। অন্য ছয়টি স্থানে ইতিমধ্যে বিদ্যমান সেই নাম অনুসারে যদি কোনও স্থানীয় সিস্টেমড সার্ভিস ইউনিট না পেয়ে থাকে তবে সেখান থেকে systemd-sysv-generatorভেন স্মোরেনবুর্গ rcস্ক্রিপ্টগুলি চালিত পরিষেবা ইউনিটগুলি তৈরি করে /etc/init.d

সিস্টেমড সার্ভিস ম্যানেজমেন্ট কেবল পরিষেবা ইউনিট সম্পর্কে জানে। এই স্বয়ংক্রিয়ভাবে (পুনরায়) উত্পাদিত পরিষেবা ইউনিটগুলি ভ্যান স্মুরেনবার্গে rcস্ক্রিপ্টগুলির জন্য প্রার্থনা করার জন্য লিখিত হয় । অন্যান্য জিনিসগুলির মধ্যে তাদের রয়েছে:

[ইউনিট]
SourcePath = জন্য / etc / init.d / wibble
[পরিষেবা]
এক্সিকিস্টার্ট = / etc / init.d / উইবল শুরু
এক্সেকস্টপ = / ইত্যাদি / init.d / উইবল স্টপ

প্রাপ্ত জ্ঞান হ'ল ভ্যান স্মোরেনবুর্গ rcস্ক্রিপ্টগুলির অবশ্যই একটি এলএসবি শিরোনাম থাকতে হবে এবং এটি /etc/rc?.d/সিস্টেম দ্বারা আরোপিত অগ্রাধিকারগুলি সম্মান না করে সমান্তরালে চালিত হবে। এটি সমস্ত পয়েন্টে ভুল।

বস্তুত, তারা যদি না তারা একটি lsb হেডার থাকতে হবে না এবং systemd-sysv-generator(আরও সীমিত পুরাতন তাহলে RedHat মন্তব্য হেডার চিনতে পারে description:, pidfile:এবং তাই ঘোষণা)। তদুপরি, এলএসবি শিরোনামের অনুপস্থিতিতে এটি /etc/rc?.dপ্রতীকী লিঙ্ক ফার্মগুলির বিষয়বস্তুগুলিতে ফিরে আসবে , লিঙ্কের নামগুলিতে এনকোড করা অগ্রাধিকারগুলি পড়বে এবং সেগুলি ক্রমবর্ধমান করার আগে / পরে একটি পরিষেবা নির্মাণ করবে, পরিষেবাগুলি সিরিয়ালকরণ করবে। কেবল এলএসবি শিরোনামই প্রয়োজন হয় না, এবং কেবলমাত্র তারা অর্ডার করার আগে / পরে এনকোড করে না যে জিনিসগুলি কিছুটা সিরিয়াল করে দেয়, তাদের সম্পূর্ণ অনুপস্থিতিতে ফ্যালব্যাক আচরণটি আসলে উল্লেখযোগ্যভাবে অ-সমান্তরাল ক্রিয়াকলাপ।

যে /etc/rc3.dবিষয়টি গুরুত্বপূর্ণ মনে হয়নি তা হ'ল আপনি সম্ভবত সেই স্ক্রিপ্টটি অন্য /etc/rc?.d/ডিরেক্টরিতে সক্ষম করেছেন enabled systemd-sysv-generatorকোন তালিকাভুক্ত হচ্ছে অনুবাদ /etc/rc2.d/, /etc/rc3.d/এবং /etc/rc4.d/একটি নেটিভ মধ্যে Wanted-Bysystemd হল এর সাথে সম্পর্ক multi-user.target। পরিচালিত বিশ্বে রান স্তরগুলি "অপ্রচলিত" এবং আপনি সেগুলি সম্পর্কে ভুলে যেতে পারেন।

আরও পড়া


2
ডেবিয়ান system-জেনারেটর ডিরেক্টরি / usr / lib উপর liberal এর সংক্ষিপ্ত রূপ বাস করে না, কিন্তু / packages.debian.org/sid/amd64/systemd/filelist
Braiam

5
এটি একটি সরাসরি আপ আশ্চর্যজনক উত্তর। স্যার ভাল করেছেন স্যার।
পিলম্যান

1
আপনাকে ধন্যবাদ, ধন্যবাদ, এই জন্য আপনাকে ধন্যবাদ! ডেবিয়ান 8 এবং আরএইচ / সেন্টোস 7 সিস্টেমের মিশ্রণ সিসভিনিট বনাম সিস্টেমড পরিষেবা নির্ভরতা পরিচালনাকে কিছুটা মাথা ব্যথার কারণ করেছে তবে সিস্টেমেড কী করছে তার এই ব্যাখ্যাটি আমার বোঝাপড়াকে ব্যাপকভাবে সহায়তা করেছে।
টবি

এই জেনারেটর কাজ করে। আমি অনুগামীদের জন্য আরও উল্লেখ করলাম, আপনার যদি একটি পুরানো সংস্করণ থাকে systemdএবং একটি /etc/init.d স্ক্রিপ্ট "বুট শুরু" সেট না করে থাকে তবে এটি প্রত্যাশিত হিসাবে কাজ করবে তবে এতে প্রদর্শিত হবে না শো-ইউনিটগুলির তালিকা: unix.stackexchange.com/a/518894/8337
রোজারডপ্যাক

এই জেনারেটর কাজ করে। আমি অনুগামীদের জন্য আরও উল্লেখ করতে পারি যে, আপনার কাছে যদি সিস্টেমড এবং একটি /etc/init.d স্ক্রিপ্টের পুরানো সংস্করণ থাকে যা "আরম্ভের সময় বুট করুন" না সেট করা থাকে তবে এটি সিস্টেমেটিএলটি প্রত্যাশা অনুযায়ী শুরু / থামবে তবে জিতেছে শো-ইউনিটগুলির তালিকাগুলিতে প্রদর্শিত হবে না: unix.stackexchange.com/questions/517872/… এছাড়াও এনবি যে আপনি মূলত /etc/init.d/xx চালিয়ে সরাসরি এই পরিষেবা "নিয়ন্ত্রণ" করতে পারবেন না বা সিস্টেমড পায় ... কী চলছে এবং কী নয় তা নিয়ে বিভ্রান্ত: |
রজারডপ্যাক

17

সিস্টেমড এসআইএসভি ইনডি স্ক্রিপ্টগুলির সাথে পিছনে সামঞ্জস্যপূর্ণ । এলএসবি ৩.১ অনুসারে, স্ক্রিপ্টটি কখন শুরু করতে / থামাতে হবে এবং স্ক্রিপ্টটির জন্য / বন্ধ করার জন্য স্ক্রিপ্টের জন্য কী প্রয়োজন হবে তা নির্ধারণ করে তথ্য স্ক্রিপ্টটিতে তথ্যমূলক মন্তব্য কনভেনশন থাকতে হবে। এটি একটি উদাহরণ:

### BEGIN INIT INFO
# Provides: my-service
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop service my-service
# Description: my-service blah blah ...
### END INIT INFO

এটি একটি মন্তব্য করা বিভাগ যা এসআইএসভি দ্বারা উপেক্ষা করা হয়েছে। অন্যদিকে, সিস্টেমড নির্ভরতা সম্পর্কিত তথ্যগুলি পড়ে এবং তার উপর নির্ভর করে সেই স্ক্রিপ্টগুলি চালায়।

তবে একটি পয়েন্ট রয়েছে, যেখানে initd স্ক্রিপ্টগুলির ক্ষেত্রে systemd এবং SysV পৃথক। SysV ফাইলনামে তাদের সংখ্যার ভিত্তিতে ক্রমানুসারে ক্রমানুসারে স্ক্রিপ্টগুলি কার্যকর করে। সিস্টেমড না। নির্ভরতা মেটাতে থাকলে, সিস্টেমডি স্ক্রিপ্টগুলির নাম সংখ্যায়ন না করে অবিলম্বে স্ক্রিপ্টগুলি চালায়। তাদের মধ্যে বেশিরভাগ সম্ভবত অর্ডার করার কারণে ব্যর্থ হবে। অন্যান্য প্রচুর অসুবিধাগুলি বিবেচনা করা উচিত।


যদি একই সার্ভিসের জন্য আরআইআর স্ক্রিপ্ট এবং। সার্ভিস ফাইল থাকে, সিস্টেমড উভয়ই নির্বাহ করবে, নির্ভরতা পূরণের সাথে সাথেই (init স্ক্রিপ্টের ক্ষেত্রে, এলএসবি শিরোনামে সংজ্ঞায়িত)।


ঠিক আছে, তবে আমার কাছে / lib / systemd / system / তে পুরো একগুচ্ছ। সার্ভিস ফাইল রয়েছে। সিস্টেমড আসলে কী সম্পাদন করে? পরিষেবা ফাইলগুলিতে যা কিছু নির্দিষ্ট করা আছে (নির্ভরতার ক্রমে), init.d স্ক্রিপ্টগুলি বা উভয়ই?
মার্টিন ড্রটজবার্গ

@ মার্টিনড্রাটজবার্গ আমি উত্তরে এটি যোগ করেছি
বিশৃঙ্খলা

1
সিডনোট হিসাবে, দেবিয়ান সবেমাত্র এলএসবি সামঞ্জস্যতা ডাম্প করার ঘোষণা করেছে: নিবন্ধ.gmane.org/gmane.linux.debian.devel.lsb/1103
জানুয়ারী

সিস্টেমড হ'ল সিএসভি স্ক্রিপ্টগুলির সাথে সামঞ্জস্যপূর্ণ কিছু। কেবলমাত্র উক্ত বিবৃতিই ভুল নয়, তবে রেফারেন্সযুক্ত লিঙ্কটি এটি পরিষ্কার করে দেয় যে এটি কেবল "বেশিরভাগই সুসংগত" এবং একই ফলাফল উত্পন্ন করতে প্রয়োজনীয় পরিমাণ পরিশ্রম অত্যন্ত মারাত্মক।
জুলি অস্টিনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.