সিস্টেম-নিরীক্ষিত পরিষেবা ব্যর্থ স্থানে প্রবেশ করলে বিজ্ঞপ্তি পান


32

আমার সিস্টেমেড সার্ভিস ক্র্যাশ হয়ে গেলে বা হ্যাং হয়ে থাকে তখন আমার নেটওয়ার্ক বার্তা প্রেরণ করা দরকার (যেমন, ব্যর্থ অবস্থায় প্রবেশ করে; আমি ওয়াচডোগসেক = ব্যবহার করে হ্যাংয়ের জন্য নিরীক্ষণ করি)। আমি লক্ষ্য করেছি যে নতুন সিস্টেমে ব্যর্থতা = রয়েছে, কিন্তু তারপরে দেখেছি যে এটি স্বেচ্ছাচারিত আদেশগুলি মঞ্জুরি দেয় না, তবে কেবল পুনরায় চালু / শাটডাউন করে down

বিশেষত, যখন সিস্টেমড প্রোগ্রামটি ক্র্যাশ হয়ে গেছে সনাক্ত করে তখন আমার একটি নেটওয়ার্ক বার্তা প্রেরণের একটি উপায় প্রয়োজন এবং অন্যটি যখন এটি সনাক্ত করে এটি হ্যাং হয়ে গেছে।

আমি "লগগুলিকে পার্স করা" এর চেয়ে আরও ভাল উত্তরের জন্য প্রত্যাশা করছি এবং আমার কাছে এমন কিছু প্রয়োজন যা তাত্ক্ষণিক প্রতিক্রিয়া সময় নিয়েছে, তাই আমি মনে করি না যে একটি পোলিংয়ের পদ্ধতি ভাল; ঘটনাটি ঘটতে পারে এমন কিছু হওয়া উচিত।


আপনি কী অর্জন করতে চাইছেন দয়া করে একটি উদাহরণ প্রদান করতে পারেন (এমনকি একটি অ-কর্মক্ষম)?
দাউদ

আপনি কি এই প্রশ্নটিতে কোনও মন্তব্য যুক্ত করার পরিবর্তে এই প্রশ্নটি যুক্ত করার জন্য আপনার প্রশ্নটি সম্পাদনা করতে পারেন? :)
দাউদ

উত্তর:


31

সিস্টেমড ইউনিটগুলি অনফয়েল সমর্থন করে যা ইউনিট ব্যর্থ হয়ে গেলে একটি ইউনিট (বা আরও) সক্রিয় করবে। আপনি কিছু লাগাতে পারেন

 OnFailure=notify-failed@%n

এবং তারপরে notify-failed@.serviceপরিষেবাটি তৈরি করুন যেখানে আপনি প্রয়োজনীয় সুনির্দিষ্ট ব্যবহার করতে পারেন (আপনি সম্ভবত কমপক্ষে% i চাইবেন) স্ক্রিপ্ট বা আদেশটি প্রবর্তন করার জন্য যা বিজ্ঞপ্তি প্রেরণ করবে।

আপনি একটি বাস্তব উদাহরণ দেখতে পারেন http://nurlightlightlabs.se/systemd.status.mail.on.unit.failure


5
লিঙ্কযুক্ত সাইটে নির্দেশাবলীর জন্য কয়েকটি সংশোধন প্রয়োজন। প্রথমত, notify%n.serviceনিরর্থক, এবং এর ফলাফল হবে notify@my-service.service.service। দ্বিতীয়ত, %iপরিবর্তে ব্যবহার করা উচিত %I, বা নামের সমস্ত ড্যাশগুলি ফরোয়ার্ড স্ল্যাশে রূপান্তরিত করা হবে।
অরডভেন

4
একক বা সমস্ত ইউনিটের জন্য তাদের ইউনিট ফাইলগুলি সংশোধন না করে কী করার উপায় আছে?
ভ্লাদিমির পানতেলিভ

16

অবহিত করার জন্য কেবল আমার উপায়:

/etc/systemd/system/notify-email@.service

[Unit]
Description=Sent email 

[Service]
Type=oneshot
ExecStart=/usr/bin/bash -c '/usr/bin/systemctl status %i | /usr/bin/mailx -Ssendwait -s "[SYSTEMD_%i] Fail" your_admin@company.blablabla'

সিস্টেমডে যুক্ত করুন:

systemctl enable /etc/systemd/system/notify-email@service

অন্যদের পরিষেবাগুলিতে যুক্ত করুন:

[Unit]
OnFailure=notify-email@%i.service

কনফিগারেশনটি পুনরায় লোড করুন:

systemctl daemon-reload

একটানা কয়েকবার এটিকে ট্রিগার করা এড়ানোর কোনও উপায় আছে কি? কিছু পরিস্থিতিতে একটি পরিষেবা সম্পর্কে 1K ইমেলগুলি পাওয়া যায় যা রাতে ব্যর্থ হয়েছিল এবং নিজেকে পুনরায় চালু করার জন্য বারবার চেষ্টা করা সহায়ক নয়।
স্টারবিয়াম্রেনবোলাবস

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