স্টার্টলিমিটইন্টারওয়ালের পরে সিস্টেমেড সার্ভিস স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে


33

আমি চাই যে আমার সিস্টেমেড পরিষেবাটি ব্যর্থতার পরে স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে। অতিরিক্তভাবে আমি পুনঃসূচনাগুলি সীমাবদ্ধ করতে চাই। আমি 90 সেকেন্ডের সময়কালের মধ্যে সর্বাধিক 3 টি পুনরায় আরম্ভ করতে চাই। সুতরাং আমি নিম্নলিখিত কনফিগারেশন সম্পন্ন করেছি।

[পরিষেবা]
পুনরায় চালু করুন = সর্বদা
স্টার্টলিমিটইন্টারওয়াল = 90
স্টার্টলিমিটবার্স্ট = 3

এখন পরিষেবা ব্যর্থতায় পুনরায় চালু করা হয়েছে। 3 দ্রুত ব্যর্থতা / পুনরায় আরম্ভের পরে এটি আর প্রত্যাশা অনুযায়ী পুনরায় আরম্ভ হচ্ছে না। এখন আমি প্রত্যাশা করেছি টাইম আউট (স্টার্টলিমিটইন্টারওয়াল) এর পরে সিস্টেমেড পরিষেবাটি চালু করবে। টাইমআউট (90 সিসি) এর পরে সিস্টেমেড স্বয়ংক্রিয়ভাবে পরিষেবাটি শুরু করছে না, যদি আমি সময়সীমা পেরিয়ে যাওয়ার পরে যদি ম্যানুয়ালি পরিষেবাটি চালু করি। তবে আমি চাই যে সিস্টেমড স্টার্টলিমিটইনটার্ভালের পরে স্বয়ংক্রিয়ভাবে পরিষেবাটি শুরু করবে। এই বৈশিষ্ট্যটি কীভাবে অর্জন করবেন তা সম্পর্কে দয়া করে আমাকে জানান।


3
আমি একটি নিবন্ধ লিখেছিলাম যাতে কীভাবে একটি পরিষেবা তৈরি করা যায়, এবং কীভাবে এই বিশেষ সমস্যাটি এড়ানো যায়: সিস্টেমেড সহ একটি লিনাক্স পরিষেবা তৈরি করা
বেনিয়ামিন

2
আমি মনে করি আপনি খুঁজছেন StartLimitIntervalSec, না StartLimitInterval
মার্ক ট্যামস্কি

উত্তর:


30

90 দ্বিতীয় বিরতিতে 3 বার একটি পরিষেবা পুনঃসূচনা করতে আপনার সিস্টেমড পরিষেবা ফাইলটিতে নিম্নলিখিত লাইনগুলি অন্তর্ভুক্ত করুন:

Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3

এটি আমার জন্য এমন একটি পরিষেবার জন্য কাজ করেছে যা 'টাইপ = অলস' ব্যবহার করে স্ক্রিপ্ট চালায়। মনে রাখবেন যে 'স্টার্টলিমিটইনটারওয়াল' অবশ্যই 'রিস্টার্টসেক * স্টার্টলিমিটবার্স্ট' এর চেয়ে বড় হতে হবে অন্যথায় পরিষেবাটি অনির্দিষ্টকালের জন্য পুনরায় চালু হবে।

সিস্টেমড কীভাবে এই বিকল্পগুলি ব্যবহার করে তা কার্যকর করার জন্য আমাকে প্রচুর বিচার এবং ত্রুটি সহ কিছুটা সময় নিয়েছিল, যা পরামর্শ দেয় যে সিস্টেমড সেই সাথে প্রত্যাশার মতো নথিভুক্ত নয়। এই বিকল্পগুলি কার্যকরভাবে পুনরায় চেষ্টা করার চক্র সময় এবং সর্বাধিক পুনরায় চেষ্টা করে যা আমি খুঁজছিলাম provide


এটি স্বীকৃত উত্তর হিসাবে চিহ্নিত করা উচিত ...
জেফ

StartLimitInterval=আমার সর্বশেষ উবুন্টু 18 তে নির্দেশিকা খুঁজে পাচ্ছে না ...
উইক

10

আপনি যে আচরণটি বর্ণনা করেছেন তা ডকুমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ:

স্টার্টলিমিটইন্টারওয়াল =, স্টার্টলিমিটবার্স্ট = পরিষেবা শুরু করার হার সীমাবদ্ধ করে কনফিগার করুন। ডিফল্টরূপে, 10 সেকেন্ডের মধ্যে 5 বারের বেশি শুরু করা পরিষেবাগুলি 10 সেকেন্ডের অন্তর শেষ না হওয়া পর্যন্ত আর কোনও বার শুরু করার অনুমতি নেই। এই দুটি বিকল্পের সাহায্যে, এই হার সীমাবদ্ধ হতে পারে সংশোধন করা। পরীক্ষার ব্যবধানটি কনফিগার করতে স্টার্টলিমিটইন্টারওয়াল = ব্যবহার করুন (ম্যানেজার কনফিগারেশন ফাইলে ডিফল্টস্টার্টলিমিটইন্টারওয়াল = ডিফল্ট, যে কোনও ধরণের হার সীমাবদ্ধ করতে অক্ষম করতে 0 সেট করুন)। অন্তরপ্রতি কতটি সূচনা অনুমোদিত তা কনফিগার করতে স্টার্টলিমিটবার্স্ট = ব্যবহার করুন (ম্যানেজার কনফিগারেশন ফাইলে ডিফল্টস্টার্টলিমিটবার্স = ডিফল্ট)। এই কনফিগারেশন বিকল্পগুলি পুনঃসূচনা = এর সাথে একত্রে বিশেষত কার্যকর; যাইহোক, তারা সমস্ত ধরণের শুরুতে (ম্যানুয়াল সহ) প্রযোজ্য, কেবল যা রিস্টার্ট = যুক্তি দ্বারা চালিত নয়।নোট করুন যে ইউনিটগুলি পুনঃসূচনা করার জন্য কনফিগার করা হয়েছে = এবং যেগুলি সূচনা সীমাতে পৌঁছেছে সেগুলি আর পুনরায় আরম্ভ করার চেষ্টা করা হয় না; তবে এগুলি পরবর্তী সময়ে পুনরায় আরম্ভ করা যেতে পারে, যে বিন্দু থেকে পুনরায় সূচনা যুক্তিটি আবার সক্রিয় করা হবে। নোট করুন যে systemctl রিসেট-ব্যর্থ একটি পরিষেবা পুনরায় আরম্ভের হারের কাউন্টারকে ফ্লাশ করে দেবে, যা প্রশাসক যদি ম্যানুয়ালি কোনও পরিষেবা শুরু করতে চান এবং প্রারম্ভ সীমাটি এতে হস্তক্ষেপ করে তবে তা কার্যকর।

আমি এখনও আপনার নিজের ব্যবহারের আচরণটি সম্পাদনের উপায় খুঁজে বের করার চেষ্টা করছি।


আপনি উল্লেখ হিসাবে এটি একটি উত্তর চেয়ে বেশি মন্তব্য।
ডেভ এম

ঠিক আমার যা দরকার, তা
কিছু লিনাক্স Nerd

আপনি যে ডকুমেন্টেশন যুক্ত করেছেন তার মতে, এটি StartLimitIntervalSec=(এবং DefaultStartLimitIntervalSec=) হওয়া উচিত নয় ? Secউভয় পরামিতি নাম যুক্ত নোট করুন ।
ডক্টর জে

6

কিছু বছর পরে এবং সিস্টেমেড 232 এর সাথে প্রশ্নে এবং 2016 থেকে উত্তরগুলিতে বর্ণিত হিসাবে এটি আর কাজ করে না ption বিকল্পের নাম StartLimitIntervalSecএবং বিভাগগুলি পরিবর্তিত হয়েছে। এখন এটি উদাহরণস্বরূপ দেখতে হবে:

[Unit]
StartLimitBurst=5
StartLimitIntervalSec=33

[Service]
Restart=always
RestartSec=5
ExecStart=/bin/sleep 6

এটি 30 সেকেন্ডে 5 টি পুনঃসূচনা করবে (5 * 6) এবং 33 সেকেন্ডে একটি পুনরায় চালু করবে। সুতরাং আমাদের 33 সেকেন্ডে 6 টি পুনঃসূচনা রয়েছে। এটি 33 সেকেন্ডে 5 টি পুনরায় আরম্ভের সীমা অতিক্রম করে। সুতরাং পুনঃসূচনাগুলি প্রায় 31 সেকেন্ডের পরে 5 টি গণনায় থামবে।


1
দেখে মনে হচ্ছে StartLimitIntervalএটি Serviceবিভাগে এখনও সমর্থিত, যদি বিনা প্রতিবেদনে থাকে । তবে নতুন, পছন্দসই StartLimitIntervalSecকেবল এতে কাজ করে Unit
ডানেক ডুভাল

1

আপনি সেট করতে পারেন OnFailureএটি ব্যর্থ হলে আপনি অন্য পরিষেবা শুরু করতে । ইন অন ব্যর্থ সেবা আপনি যে অপেক্ষা করছে একটি স্ক্রিপ্ট চালাতে পারেন এবং তারপর আপনার সেবা পুনরায় চালু।

কীভাবে সেট আপ করবেন তার একটি নমুনার জন্য ইউনিট ব্যর্থতায় সিস্টেমড স্ট্যাটাস মেল দেখুন এবং পরিবর্তে পরিষেবাটি পুনরায় আরম্ভ করার জন্য এটি সংশোধন করুন।


1

তুমি ব্যবহার করতে পার StartLimitAction=reboot । এটি স্টার্টলিমিটইন্টারওয়ালের পরে সিস্টেমটিকে পুনরায় চালু করবে।

স্টার্টলিমিটএকশন = স্টার্টলিমিটইন্টারওয়াল = এবং স্টার্টলিমিটবার্স্ট = এর সাথে সজ্জিত হারের সীমাটি যদি চাপিত হয় তবে ব্যবস্থা নিতে কনফিগার করুন। রিবুট, রিবুট-ফোর্স বা রিবুট-তাত্ক্ষণিকর একটিও গ্রহণ করে না। যদি কোনওটি সেট না করা থাকে তবে হারের সীমাটি আঘাত করা কোনও ক্রিয়াকলাপ উত্সাহিত করবে না যে শুরু করার অনুমতি দেওয়া হবে না। স্বাভাবিক শাটডাউন প্রক্রিয়া (অর্থাত্ সিস্টেমট্যাক্টাল রিবুটের সমতুল্য) অনুসরণ করে রিবুট পুনরায় বুট হয়। রিবুট-ফোর্স বাধ্যতামূলক রিবুট সৃষ্টি করে যা বাধ্যতামূলকভাবে সমস্ত প্রক্রিয়া বন্ধ করে দেবে তবে রিবুট-এ কোনও নোংরা ফাইল সিস্টেম তৈরি করা উচিত নয় (যেমন সিস্টেমট্যাক্ট রিবুট -f এর সমতুল্য) এবং পুনরায় বুট করার ফলে রিবুট (2) সিস্টেম কলটি তাত্ক্ষণিকভাবে কার্যকর হতে পারে, যার ফলস্বরূপ তথ্য ক্ষতি কারও কাছে ডিফল্ট নেই।

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