ক্র্যাশ প্রক্রিয়াগুলি পুনরায় চালু করার সহজ উপায়?


10

আমার ওয়েব সার্ভারে চলমান বেশ কয়েকটি প্রক্রিয়া পর্যবেক্ষণ করা দরকার। কোনও কারণে, বার্নিশ বর্তমানে প্রতিদিন বা দু'বার একবার ক্র্যাশ হয়। আমি কথিত বার্নিশটি স্বয়ংক্রিয়ভাবে পুনঃসূচনা করতে মনিট ব্যবহার করছি, তবে এটি কার্যকর হয় না। বার্নিশের জন্য আমার মনিট.কনফ এন্ট্রি এখানে।

check process varnish with pidfile /var/run/varnish.pid
    start program = "/etc/init.d/varnish start" with timeout 60 seconds
    stop program = "/etc/init.d/varnish stop"
    if failed host <my server ip> port 80 protocol http
        and request "/blank.html" then restart
    if 3 restarts within 5 cycles then timeout
    group server

লগ ফাইলটি দেখায় যে বার্নিশ চলমান বন্ধ হওয়ার পরে, প্রচেষ্টাটি পুনরায় আরম্ভ করার পরে সমস্ত ব্যর্থ হয়। তারপরে অবশেষে মনিট বার্নিশ পর্যবেক্ষণ বন্ধ করে দেয়।

আমি কীভাবে এটি ঠিক করতে পারি তার জন্য কারও কাছে পরামর্শ রয়েছে? বা আরও ভাল, আপনি ক্র্যাশ প্রক্রিয়াগুলি স্বয়ংক্রিয়ভাবে নিরীক্ষণ এবং পুনরায় চালু করার অন্যান্য সহজ উপায়গুলির পরামর্শ দিতে পারেন? ধন্যবাদ!


প্রাক-ব্যবস্থাপনার সময়ে এ জাতীয় জিনিসগুলি কতটা কঠিন ছিল তা আমি বিশ্বাস করতে পারি না।
Fl0v0

উত্তর:


17

আমি ডিমনটোলে ( http://cr.yp.to/daemontools.html ) সন্ধান করব ml

তদারকি ঠিক এই উদ্দেশ্যে তৈরি করা হয়েছিল - প্রক্রিয়াগুলি শুরু করতে এবং সেগুলি দেখার জন্য, যদি তারা কখনও অবসান হয় তবে অবিলম্বে পুনরায় চালু করে।

আপনি এখনও মনিট ব্যবহার করতে পারেন যদি আপনার "সরল" এটি এখনও চলছে "চেক" এর চেয়ে আরও জটিল কিছু করার দরকার হয়, এবং যদি প্রক্রিয়াটি পুনরায় আরম্ভ করার প্রয়োজন হয়, তবে তদারকির মাধ্যমে এটি করুন।


অস্থির পরিষেবা প্রক্রিয়াগুলি পর্যবেক্ষণের জন্য আমি ডিমনটোলগুলিও ব্যবহার করি। যদি বলতে হয় তবে বেশ সহজ। :-)
এডোমোর

4

আপনি পুনরায় পুনর্বার অ্যাকশন ব্যবহার করে মৃত প্রক্রিয়া পুনরায় আরম্ভ করতে / etc / inittab ব্যবহার করতে পারেন ।

Http://aplawrence.com/Unixart/startup.html এ inittab বিভাগটি দেখুন


2

পরিষেবাগুলি পুনঃসূচনা করার জায়গায় আপনার যদি জায়গা থাকে তবে আপনি নাগিওসের সাথে ইভেন্ট হ্যান্ডলার স্ক্রিপ্টগুলি ব্যবহার করতে পারেন ।

যদি বার্নিশটি শুরু করার জন্য রুট অনুমতি প্রয়োজন হয় (init.d স্ক্রিপ্টগুলি সাধারণত হয়) "/etc/init.d/varnish start" কে "sudo /etc/init.d/varnish start" এ পরিবর্তন করুন। তবে এটি সম্ভবত যথেষ্ট হবে না যেহেতু আপনি সম্ভবত সমস্ত কমান্ডকে মোট sudo nopasswd সুবিধাগুলি হিসাবে চালাতে চান না এবং শেল স্ক্রিপ্টে sudo প্রদান মূলত ঠিক ততটাই খারাপ হবে। সুতরাং আপনাকে এই ডিগ্রি স্ক্রিপ্টের কোন কমান্ডগুলির sudo দরকার তা নির্ধারণ করতে হবে, মনিট ব্যবহারকারীকে / etc / sudoers ফাইলের মধ্যে সেই কমান্ডগুলি sudo সুবিধাগুলি প্রদান করুন এবং অবশেষে সেই init স্ক্রিপ্টটি সেই অনুযায়ী সম্পাদনা করুন। বা সম্ভবত এই সমস্ত বার্নিশের পরিবর্তে অ-রুট ব্যবহারকারী হিসাবে চালানো যেতে পারে?

অবশেষে, আমি নিশ্চিত যে আপনি এটি জানেন তবে আমি যাই হোক না কেন এটি বলতে যাচ্ছি। আপনি স্পষ্টতই এতে প্রচুর প্রচেষ্টা করছেন, আমি আশা করি আপনি কেন বার্নিশ ক্র্যাশ করছেন এবং প্রকৃতপক্ষে এটি ঠিক করছেন (বা কেন এটি নির্ধারণ করার জন্য বিকাশকারীকে হানা দিচ্ছেন) এটি নির্ধারণের জন্য আপনি যতটা প্রচেষ্টা চালিয়ে যাচ্ছেন :-)

আপডেট:
এটি পরিষ্কার হিসাবে নাও হতে পারে, তবে এটি রুট হিসাবে সম্পন্ন করার একটি সহজ উপায় হতে পারে একটি স্ক্রিপ্ট সেটআপ করা যা প্রক্রিয়াটি ঠিক আছে কিনা তা পরীক্ষা করে এবং না শুরু করে কিনা তা পরীক্ষা করে। তারপরে ক্রোন কাজ হিসাবে প্রতি মিনিট কয়েক মিনিটে এই স্ক্রিপ্টটি চালান।


আমি প্রথমে নাগিওসকে বিবেচনা করেছি, তবে আমার উদ্দেশ্যে ছোট এবং সাধারণ কিছু চাইছিল। এবং হ্যাঁ, আমি বার্নিশ ইস্যুটি সন্ধান করছি। আমার সার্ভারগুলির মধ্যে একটি এটি দীর্ঘদিন ধরে স্থিতিশীলভাবে চালাচ্ছে, তাই এটি অবশ্যই আমার সাথে করা উচিত। :(
লিন

1

স্ট্যাকওভারফ্লো থেকে নেওয়া আরও একটি দুর্দান্ত পদ্ধতি :

until myserver; do
    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
    sleep 1
done

এটি ক্রোনটবে যুক্ত করা যেতে পারে:

crontab -e

তারপরে আপনার মনিটরের স্ক্রিপ্ট শুরু করতে একটি বিধি যুক্ত করুন:

@reboot /usr/local/bin/myservermonitor

বা স্ক্রিপ্ট হিসাবে যুক্ত করা হয়েছে /etc/init.d

কেন এটি ভাল পদ্ধতির তা বিশদ ব্যাখ্যার জন্য স্ট্যাকওভারফ্লো উত্তরটি দেখুন ।


0

আমি এই সমস্যাটি পরিচালনা করার সবচেয়ে সহজ উপায়ও খুঁজছিলাম। আমি খুঁজে পেতে সবচেয়ে সহজ উপায় হ'ল ট্যাগের শেষ লাইন হিসাবে Restart=allwaysসম্পর্কিত .serviceফাইলটিতে কেবল যুক্ত করা ।/etc/systemd/system/multi-user.target.wants/[service]

এরপরে পরিবর্তনগুলি পুনরায় লোড করতে sudo systemctl daemon-reloadঅনুসরণ করুন sudo systemctl restart service.service

পরিষেবাটি চলছে কিনা তা পরীক্ষা করে আপনি পরীক্ষা করতে পারেন systemctl status processname:, শুরুর টাইমস্ট্যাম্পটি পরীক্ষা করে দেখুন। এর পরে ps -ef | grep servicename, বিজ্ঞাপনটি সন্ধান পাওয়া আইডি দিয়ে প্রক্রিয়াটি মেরে ফেলবে kill 1234। এর পরে systemctl status processnameআবার করুন এবং শুরুর টাইমস্ট্যাম্প আপডেট হয়েছে কিনা তা পরীক্ষা করে দেখুন।

এটিতে কাজ করা উচিত:

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