বুটিং / স্টার্টআপের সময় স্ক্রিপ্ট চালানো; init.d বনাম ক্রোন @ রিবুট


48

আমি বর্তমানে সিস্টেমের প্রারম্ভকালে / বুট করার সময় স্ক্রিপ্ট চালানোর জন্য init.dএবং ক্রোনটির মধ্যে পার্থক্যটি বোঝার চেষ্টা করছি @reboot

ব্যবহারের @reboot(এই পদ্ধতিতে উল্লেখ করা হয়েছিল এই ফোরামে দ্বারা hs.chandra ), কিছু কি সহজ সহজভাবে মধ্যে যাওয়া দ্বারা crontab -eএবং একটি তৈরি @reboot /some_directory/to_your/script/your_script.txtএবং তারপর your_script.txtপ্রত্যেক সময় সিস্টেম পুনরায় বুট মৃত্যুদন্ড কার্যকর হইবে। একটি গভীরতা ব্যাখ্যা @rebootহয় এখানে

বিকল্পভাবে আপনার স্ক্রিপ্টের দ্বিতীয় লাইনে এম্বেড /etc/init.d/your_script.txtকরে যেমন:

#!/bin/bash
# /etc/init.d/your_script.txt

আপনি দৌড়াতে পারেন chmod +x /etc/init.d/your_script.txtএবং এটি your_script.txtপ্রতিবার সিস্টেম বুট হওয়ার পরে চালানো উচিত ।

প্রশ্নোত্তর: দুজনের মধ্যে মূল পার্থক্য কী?
প্রশ্ন 2: কোনটি আরও শক্তিশালী?
প্রশ্ন 3: দুজনের মধ্যে আরও ভাল কেউ আছে?
প্রশ্ন 4: বুট করার সময় এটি কোনও স্ক্রিপ্ট এম্বেড করার সঠিক উপায়?

আমি স্টার্টআপ চলাকালীন চালানোর জন্য একটি ব্যাশ .sh ফাইল অন্তর্ভুক্ত করব।


2
প্রাসঙ্গিক এছাড়াও সিস্টেমড , লিংক 1 লিঙ্ক 2
রুফাস

উত্তর:


37

init.dএসআইএসভি স্ক্রিপ্ট নামেও পরিচিত এটি সিস্টেম ইনিশিয়েশন এবং শাটডাউন চলাকালীন পরিষেবাগুলি শুরু করা এবং বন্ধ করা to ( /etc/init.d/স্ক্রিপ্টগুলি সামঞ্জস্যের জন্য সিস্টেমযুক্ত সক্ষম সিস্টেমগুলিতেও চালিত হয়)।

  • স্ক্রিপ্টটি বুট এবং শাটডাউন চলাকালীন কার্যকর হয় (ডিফল্টরূপে)।
  • স্ক্রিপ্টটি কেবল একটি স্ক্রিপ্ট নয়, একটি init.d স্ক্রিপ্ট হওয়া উচিত। এটা তোলে সমর্থন করা উচিত startএবং stopএবং আরো (দেখুন ডেবিয়ান নীতি )
  • সিস্টেম বুটের সময় স্ক্রিপ্টটি কার্যকর করা যেতে পারে (আপনি কখন নির্ধারণ করতে পারেন)।

crontab(এবং তাই @reboot)।

  • ক্রোন কোনও নিয়মিত কমান্ড বা স্ক্রিপ্ট কার্যকর করবে, এখানে বিশেষ কিছু নয়।
  • যে কোনও ব্যবহারকারী কোনও @rebootস্ক্রিপ্ট যুক্ত করতে পারেন (কেবল মূল নয়)
  • সিস্টেমডযুক্ত একটি ডেবিয়ান সিস্টেমে: ক্রোন এর @ রিবুট চলাকালীন কার্যকর হয় multi-user.target
  • ডেবিয়ান সিস্টেমে এসআইএসভি (সিস্টেমড নয়), ক্রোনটব (৫) উল্লেখ করেছেন: দয়া করে নোট করুন যে সূচনাটি, যতক্ষণ না @ রিবুট সম্পর্কিত, ক্রোন (8) ডেমোন স্টার্টআপের সময়। বিশেষত, এটি কিছু সিস্টেম ডেমন বা অন্যান্য সুবিধাগুলি শুরু হওয়ার আগে হতে পারে। এটি মেশিনের বুট অর্ডার ক্রমের কারণে।
  • বুট এ এবং সময় সময় একই স্ক্রিপ্ট সময়সূচী করা সহজ।

/etc/rc.localএটিকে প্রায়শই কুশ্রী বা অবমূল্যায়ন হিসাবে বিবেচনা করা হয় (কমপক্ষে রেডহ্যাট দ্বারা ), এরপরে এর কিছু সুন্দর বৈশিষ্ট্য রয়েছে:

  • rc.local কোনও নিয়মিত কমান্ড বা স্ক্রিপ্ট কার্যকর করবে, এখানে বিশেষ কিছু নয়।
  • ডেবিয়ান সিস্টেমে এসআইএসভি (সিস্টেমড নয়) সহ: rc.local(প্রায়) শেষ পরিষেবা ছিল।
  • কিন্তু সিস্টেমডযুক্ত একটি ডেবিয়ান সিস্টেমে: ডিফল্টর rc.localপরে কার্যকর করা network.targetহয় (নয় network-online.target!)

সিস্টেমযুক্ত network.targetএবং সম্পর্কিত network-online.target, নেটওয়ার্ক শেষ হওয়ার পরে চলমান পরিষেবাদিগুলি পড়ুন ।


আমার আনুন্টু ১.0.০৪-তে, আমাকে /var/run/crond.rebootপ্রতিবার ফাইল সরিয়ে ফেলতে হবে, আমি চাইলে @ রিবুট ক্রোন জবগুলি প্রতিবার সিস্টম শুরু হওয়ার পরে কার্যকর করা হবে। যদি এই ফাইলটি বিদ্যমান থাকে তবে @ রিবুট ক্রোন জবগুলি কার্যকর করা হবে না
অ্যালবার্ট

@ অ্যালবার্ট-কাতালা উবুন্টুকে একটি বাগ জমা দিন!
ফ্র্যাঙ্কলিন পাইট

12

প্রথমত, একটি ব্যাখ্যা যথাযথ:

  • init.d হ'ল ডিরেক্টরি যা পরিষেবা নিয়ন্ত্রণ স্ক্রিপ্টগুলিকে সঞ্চয় করে, যা পরিষেবাগুলির শুরু এবং থামানো নিয়ন্ত্রণ করে যেমন httpdorcron
  • rc.local একটি পরিষেবা যা সিস্টেম স্টার্টআপ প্রক্রিয়ার অংশ হিসাবে স্বেচ্ছাসেবী স্ক্রিপ্টগুলি চালনার অনুমতি দেয়

আপনার স্ক্রিপ্টটি ব্যবহার করা rc.localবা cronচালানো আরও ভাল কিনা সে বিষয়ে আমি সন্দেহ করি যে এটি ব্যবহারিকতার চেয়ে নান্দনিকতার প্রশ্ন বেশি। cronকোনও টাস্ক শিডিয়ুলার হিসাবে, কোনও মেশিনের রক্ষণাবেক্ষণ বা রক্ষণাবেক্ষণ করার পদ্ধতি হিসাবে আপডেট করা, আপডেটগুলি পরীক্ষা করা, ক্যাশে পরিষ্কার করা বা সুরক্ষা নিরীক্ষণ সম্পাদন করার উদ্দেশ্যে তৈরি করা হয়। এর অর্থ এই নয় যে এটি those ফাংশনগুলি সম্পাদন করার মধ্যে সীমাবদ্ধ, কারণ এটি নির্দিষ্ট সময়ে (যেমন @reboot) পছন্দসই কোনও স্ক্রিপ্ট বা কমান্ড চালাতে পারে ।

ব্যবহার rc.local, অপরপক্ষে, কাজের একটি সিস্টেম কনফিগারেশন টাইপ মধ্যে আরো পড়া হবে, যেমন rc.local, মেশিন দ্বারা সঞ্চালিত হচ্ছে সিস্টেম init, সাধারণত মেশিন নেটওয়ার্ক কনফিগারেশন সেট করার জন্য দায়ী, সেবা বা পরিবেশের (কিন্তু আবার, শুধু সীমাবদ্ধ নয় এই কাজটি).

উভয় পয়েন্ট, তবে, এই ঘটনাটি দ্বারা ক্ষোভ প্রকাশ করা উচিত যে সমস্ত init সিস্টেমগুলি কোনও rc.localপ্রক্রিয়া সরবরাহ করে না, এবং সমস্ত ক্রোন ডেমন একটি @rebootpsuedo ট্যাগ সরবরাহ করে না।

বোনাস পয়েন্ট

যেমনটি উল্লেখ করা হয়েছে, init.dসেই ডিরেক্টরিতে এমন স্ক্রিপ্ট রয়েছে যা পরিষেবাগুলি নিয়ন্ত্রণ করে যা আপনার সিস্টেমে চালু করা বা বন্ধ করা যেতে পারে (কমপক্ষে মেশিনগুলিতে যা SysVটাইপ init সিস্টেম ব্যবহার করে)। আপনার init সিস্টেম এবং আপনার স্ক্রিপ্টের উদ্দেশ্যগুলির উপর নির্ভর করে আপনার স্ক্রিপ্টটি কোনও পরিষেবা হিসাবে একইভাবে চালনার জন্য একটি স্ক্রিপ্টকে একটি init স্ক্রিপ্টে রূপান্তর করা যুক্তিসঙ্গত হতে পারে । এটি তবে আপনার আর ডি সিস্টেমের উপর নির্ভরশীল কারণ এই ফাইলগুলি কীভাবে তৈরি করা হয় তার চারপাশের কাঠামোটি ব্যাপকভাবে পৃথক হতে পারে।

শেষ কথা

এটি লক্ষ করা উচিত যে সাধারণত বাশ স্ক্রিপ্টগুলির .shপরিবর্তে তার প্রত্যয় দিয়ে শেষ হয় .txt, কারণ এটি তত্ক্ষণাত ফাইলটিকে একটি টেক্সট ফাইলের পরিবর্তে শেল স্ক্রিপ্ট হিসাবে বোঝায়। এটি বলা হচ্ছে, শর্ত থাকে যেহেতু এটির ফাইলটির শীর্ষে একটি শেবাং ( #!/bin/bash) রয়েছে, বা এটি হিসাবে ডাকা হয় bash /path/to/script.whatever, এটি স্ক্রিপ্টটি কার্যকর করার ক্ষেত্রে বিবেচ্য নয়।


bashস্ক্রিপ্টগুলি সাধারণত একটি এক্সটেনশনের সাথে শেষ হয় না (এবং তর্কযোগ্যভাবে হওয়া উচিত নয়)sh
মাইকজারভেজ

1
@ মিমকিজার: যদিও আমি সম্মত হই যে বেশিরভাগ ব্যাশ স্ক্রিপ্টগুলির কোনও প্রসার নেই (এবং তর্কযোগ্যভাবে হওয়া উচিত নয়) সাধারণত ".sh" এক্সটেনশানযুক্ত ফাইলগুলি বাশ স্ক্রিপ্ট হয় - দেখুন ".sh ফাইলটি কী?"
ডেভিড ক্যারি

@ ডেভিডকারি - এটিকে খুব প্রামাণিক উত্স বলে মনে হয় না।
মাইকসার্ভ

1
উইকিপিডিয়া: "ফাইলের নাম এক্সটেনশনের তালিকা" এবং উইকিপিডিয়া: "শেল স্ক্রিপ্ট" রেফারেন্স সহ আশ্চর্যজনকভাবে সাধারণ ".sh" এক্সটেনশানটিরও উল্লেখ করে।
ডেভিড ক্যারি

1
" সাধারণত ব্যাশ স্ক্রিপ্টগুলির .shপরিবর্তে প্রত্যয় দিয়ে শেষ হয়.txt " - বিশেষত অর্থ shব্যাশ স্ক্রিপ্টগুলির জন্য ফাইল নাম এক্সটেনশন (বা অন্যান্য শেল স্ক্রিপ্ট) এর চেয়ে বেশি সঠিক txtযা সাধারণত প্লেইন-পাঠ্যকে বোঝায়। এক্সটেনশনটি আপনাকে যেভাবে জিগ্ল করে তোলে আপনি তা ব্যবহার করতে পারেন তবে সাধারণ সম্মেলনটি shহ'ল , যদি কোনও এক্সটেনশন ব্যবহার করা আরও উপযুক্ত হয় এবং সাধারণত ব্যবহৃত হয়; যদিও এটা প্রয়োজন হয় না, বিশেষ করে স্ক্রিপ্ট উদ্দেশ্যে হয় থেকে নিষ্পন্ন করা হবে PATH
মোড়ানো

3

আমি নীচে আমার উত্তর লিখছি;

প্রশ্ন 1: দুজনের মধ্যে মূল পার্থক্য কী?

উপরের অন্যান্য ব্যবহারকারীদের দ্বারা বর্ণিত পার্থক্যগুলি বাদে, আমি এই বিষয়টি হাইলাইট করতে চাই যে @ রিবুট ক্রন্ড ডেমনের উপর নির্ভরশীল। ক্রন্ড শুরু হওয়ার ক্রমে আপনি নির্ভরশীল। যদিও বেশিরভাগ ক্ষেত্রে, ক্রন্ড সূক্ষ্ম শুরু হয় তবে এটি শুরু হতে কিছু সময় ব্যর্থ হতে পারে (আমার কিছু প্রকল্পে আমি কিছুটা ব্যর্থতা দেখেছি)। আপনি যখন কোনও স্ক্রিপ্ট লিখবেন, সাধারণত আপনি যদি আপনার স্ক্রিপ্টে কিছু ভুল করেন তবে ব্যর্থতা দেখা দেয় (প্রাক্তন: কোনও পরিষেবাতে নির্ভর করে যা আপনার পরিষেবার পরে শুরু হবে)

প্রশ্ন 2: কোনটি আরও শক্তিশালী?

উপরের ভিত্তিতে, আমি মনে করি যে উদ্যোগটি আরও শক্তিশালী is তবে প্রথম উত্তরে "ফ্র্যাঙ্কলিন পাইট" দ্বারা উল্লিখিত আরও একটি বিষয় রয়েছে। সাধারণত একটি ডেমনটির জন্য আপনার কাছে স্ক্রিপ্টের প্রয়োজন হয় এবং আপনার নীতিটি অনুসরণ করা উচিত

প্রশ্ন 3: দুজনের মধ্যে আরও ভাল কেউ আছে?

আমার মনে হয় না (rc.local কিছুটা পুরাতন এবং অবনমিত হয়েছে)

প্রশ্ন 4: বুট করার সময় এটি কোনও স্ক্রিপ্ট এম্বেড করার সঠিক উপায়?

হ্যাঁ. সাধারণত অ্যাপ্লিকেশন / প্যাকেজ লেখকরা এভাবে করেন।

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