লিনাক্সে ব্যর্থতার জন্য কীভাবে কোনও পরিষেবা স্বয়ংক্রিয়ভাবে পুনরায় চালু করবেন


23

উইন্ডোজে, আপনি / যখন কোনও পরিষেবা ব্যর্থ হয় তবে কী হবে তা আপনি সেট করতে পারেন। লিনাক্সে (বিশেষত সেন্টোস) একই জিনিস অর্জনের কোনও স্ট্যান্ডার্ড উপায় আছে কি?

আমার প্রশ্নের একটি বড় অংশ হ'ল: আপনি কীভাবে সকেটগুলি উন্মুক্ত রেখেছেন তা হ্যান্ডেল করবেন - উদাহরণস্বরূপ TIME_WAIT, FIN_WAIT1, ইত্যাদি ক্ষেত্রে।

এই মুহুর্তে যদি আমি যে ক্র্যাশগুলির বিকাশ করছি সেগুলির জন্য, আমি ম্যানুয়ালি এটি পুনরায় চালু করার আগে সকেটগুলি শোনার পোর্টটি সাফ করার বা পরিবর্তন করার জন্য অপেক্ষা করতে হবে।

আপনার সাহায্যের জন্য ধন্যবাদ.

উত্তর:


26

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

সকেটের দিক হিসাবে, @ গ্যালারেন এই স্পটটির উত্তর দিয়েছেন।


এটি লজ্জাজনক আমি সিদ্ধান্ত নিতে হবে যে উত্তর। আমার দুটি আলাদা প্রশ্ন জিজ্ঞাসা করা উচিত ছিল। আপনার উত্তরটি উত্তর দিন কেবল সমাধানের সন্ধানের জন্য আমার সপ্তাহগুলি শেষ হয়েছে। আপনাকে ধন্যবাদ , যাতে অনেক! রেডমুবা @ ধন্যবাদ, মনিত ভাল দেখাচ্ছে!
প্রিও

যেটা এক আপনি সঠিক, স্পষ্টভাবে চিহ্নিত করার সিদ্ধান্ত নেন ভোট দিন @ gelraen এর উত্তর। সঠিক এটির স্পট এবং খুব তথ্যপূর্ণ।
অ্যান্ড্রু এম

19

কেবল পরিষেবাটি পুনঃসূচনা অংশটির উত্তর দেওয়া হচ্ছে। আমি মনিট জুড়েও এসেছি, তবে CentOS 7 সিস্টেমে আপনার সমস্ত কিছুর যত্ন নেয়। আপনাকে কেবলমাত্র পরিষেবা ফাইলটিতে এই দুটি লাইন যুক্ত করতে হবে (যদি তারা ইতিমধ্যে সেখানে না থাকে):

Restart=always
RestartSec=3

রেফারেন্সের জন্য https://jonarcher.info/2015/08/ensure-systemd-services-restart-on-failure/ দেখুন ।

আপনি যদি একটি কাস্টম সিস্টেমড পরিষেবাদি তৈরি করতে চান তবে নিজের পরিষেবা ফাইলটি লিখতে এটি বেশ সোজা। কাস্টম HTTP সার্ভারের জন্য নীচের উদাহরণটি দেখুন।

একটি নতুন পরিষেবা ফাইল দিয়ে সম্পাদক শুরু করুন:

vim /etc/systemd/system/httpd.service

এবং নিম্নলিখিত সামগ্রীগুলি যুক্ত করুন, যা আপনি প্রয়োজনীয় হিসাবে সম্পাদনা করতে পারেন:

[Unit]
Description=My httpd Service
After=network.target

[Service]
Type=simple
User=root
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PERLLIB=/perl
ExecStart=/bin/httpd /etc/httpd.conf
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

আমি এটি বুটে স্বয়ংক্রিয়ভাবে শুরু হওয়া চাই:

systemctl enable httpd

সিস্টেমডকে পরিবর্তনগুলি সম্পর্কে বলুন এবং পরিষেবাটি শুরু করুন:

systemctl daemon-reload
systemctl start httpd

এবং এখন আপনি স্থিতিটি দেখতে পারেন:

systemctl status httpd

রেফারেন্সের জন্য, https://scottlinux.com/2014/12/08/how-to-create-a-systemd-service-in-linux-centos-7/ দেখুন


হ্যাঁ, ঠিক, বেশিরভাগ জনপ্রিয় বিতরণের systemdমানক পরিষেবা পরিচালক আপনার পক্ষে এটি করতে পারেন,
রোল্ফ

13

আপনি setsockopt(2)সাথে সকেট শোনার জন্য কল করতে পারেন SO_REUSEADDR, যাতে আপনি bind(2)সমস্ত সংযোগের মেয়াদ শেষ না হওয়ার অপেক্ষা না করে আবার এটিকে সক্ষম করতে পারবেন । আরেকটি সম্ভাবনা: কার্নেল থেকে সংযোগগুলি ফেলে দিন। ফ্রিবিএসডি এর জন্য tcpdropকমান্ড রয়েছে, লিনাক্স সম্পর্কে জানেন না।


4

যদি আপনার লিনাক্স ডিস্ট্রো SysV init এর পরিবর্তে আপস্টার্ট ব্যবহার respawnকরে তবে কীওয়ার্ডটি এটি করে।

http://upstart.ubuntu.com/cookbook/#respawn


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