কোনও পরিষেবা ব্যর্থ হলে একটি স্বেচ্ছাসেবক কমান্ড চালান


12

কোনও পরিষেবা ব্যর্থ হলে আমি কিছু স্ক্রিপ্ট চালাতে চাই। আমি এটি দেখতে সবচেয়ে কাছের জিনিসটি হ'ল FailureAction=বিকল্প ( [Service]বিভাগের অধীনে ), তবে এটি কেবল রিবুট কমান্ড সরবরাহ করে।

উত্তর:


11

OnFailure=বিভাগে একটি নির্দেশ রয়েছে [Unit], systemd.unit (5) এ নথিভুক্ত । এটা অনুসরণ হিসাবে সংজ্ঞায়িত করা হয়:

এক বা একাধিক ইউনিটের একটি স্থান-বিভাজিত তালিকা যা এই ইউনিটটি "ব্যর্থ" অবস্থায় প্রবেশ করার পরে সক্রিয় হয়।

(এছাড়াও OnFailureJobMode=একই বিভাগে একটি নির্দেশ রয়েছে যা অনফয়েল = ইউনিট সক্রিয় করার জন্য কাজের মোড সেট করতে দেয়))


দেখে মনে হচ্ছে এই বিকল্পগুলি কেবল স্ক্রিপ্টগুলির পরিবর্তে অন্যান্য ইউনিটগুলি শুরু করে।
tspang

2
@ শেপাপাং: অবশ্যই সিস্টেমেডে, একটি ইউনিট হ'ল ভাল কিছু করার একটি প্রাথমিক ইউনিট । আপনার স্ক্রিপ্টের জন্য একটি সাধারণ ইউনিট লিখুন, এটিকে নীচে রাখুন /etc/systemd/systemএবং এর নামটি OnFailure=নির্দেশিকায় রাখুন।
intelfx

2

আপনি ExecStopPostইউনিট শুরু করার পরিবর্তে সরাসরি কমান্ড চালাতে ব্যবহার করতে পারেন ।

আমি OnFailureসেটিংটি নিয়ে খুশি ছিলাম না তাই আমি সন্ধান করে দেখতে পেলাম ExecStopPost

নিম্নলিখিত বাস্তব উদাহরণ, যদি মূল কাজটি ব্যর্থ হয় তবে systemd একটি gitকমান্ড চালাবে ।

[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service

[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter

User=root

# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer

# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .

Restart=always
RestartSec=10
KillSignal=SIGKILL


[Install]
WantedBy=multi-user.target

https://www.freedesktop.org/software/systemd/man/systemd.service.html

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

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

নোট করুন যে এই কমান্ডের সাথে কনফিগার করা সমস্ত কমান্ডগুলি পরিষেবার ফলাফলের কোডের পাশাপাশি মূল প্রক্রিয়াটির প্রস্থান কোড এবং স্থিতি হিসাবে সেট করা হবে VIC SERVICE_RE ਸਲਾਹT, $ EXIT_CODE এবং $ EXIT_STATUS পরিবেশের ভেরিয়েবলগুলি, systemd.exec দেখুন (5) বিশদ জন্য।

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