जब कोई सेवा विफल होती है तो एक मनमाना आदेश चलाएँ


12

जब कोई सेवा विफल होती है तो मैं कुछ स्क्रिप्ट चलाना चाहता हूं। मेरे द्वारा देखी जाने वाली निकटतम चीज़ FailureAction=विकल्प ( [Service]अनुभाग के तहत ) है, लेकिन यह केवल रिबूट कमांड प्रदान करता है।

जवाबों:


11

OnFailure=अनुभाग में एक निर्देश है [Unit], जिसे systemd.unit (5) में प्रलेखित किया गया है । इसे निम्नानुसार परिभाषित किया गया है:

एक या एक से अधिक इकाइयों की एक अंतरिक्ष-पृथक सूची जो इस इकाई के "विफल" होने पर सक्रिय होती है।

(इसके अलावा OnFailureJobMode=उसी अनुभाग में एक निर्देश है जो ऑनफ़ेल्योर = इकाइयों को सक्रिय करने के लिए नौकरी मोड सेट करने की अनुमति देता है।)


लगता है कि वे विकल्प सिर्फ स्क्रिप्ट के बजाय अन्य इकाइयों को शुरू करते हैं।
tshepang

2
@ तशपंग: बेशक। सिस्टमड में, एक इकाई, कुछ भी करने की एक बुनियादी इकाई है। अपनी स्क्रिप्ट के लिए एक सरल इकाई लिखें, इसे नीचे रखें /etc/systemd/systemऔर OnFailure=निर्देश में इसका नाम रखें ।
intelfx

2

आप ExecStopPostयूनिट शुरू करने के बजाय सीधे कमांड चलाने के लिए भी उपयोग कर सकते हैं ।

मैं OnFailureसेटिंग से खुश नहीं था इसलिए मैं देखता रहा और पाया ExecStopPost

निम्नलिखित वास्तविक उदाहरण, यदि मुख्य कार्य विफल रहता है तो सिस्टमड एक 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

ExecStopPost = अतिरिक्त कमांड जो सेवा बंद होने के बाद निष्पादित की जाती हैं। इसमें ऐसे मामले शामिल हैं जहां ExecStop = में कॉन्फ़िगर की गई कमांड का उपयोग किया गया था, जहां सेवा में कोई ExecStop = परिभाषित नहीं है, या जहां सेवा अप्रत्याशित रूप से बाहर निकली है। ExecStart = के लिए वर्णित एक ही योजना के बाद यह तर्क कई कमांड लाइन लेता है। इन सेटिंग्स का उपयोग वैकल्पिक है। विनिर्देशक और पर्यावरण चर प्रतिस्थापन का समर्थन किया जाता है। ध्यान दें कि - ExecStop के विपरीत - - इस सेटिंग के साथ निर्दिष्ट आदेश तब लागू किए जाते हैं जब कोई सेवा सही ढंग से शुरू करने में विफल रही और फिर से बंद हो जाती है।

साफ-अप संचालन के लिए इस सेटिंग का उपयोग करने की सिफारिश की जाती है, जिसे सेवा सही ढंग से शुरू करने में विफल होने पर भी निष्पादित किया जाएगा। इस सेटिंग से कॉन्फ़िगर किए गए कमांड को तब भी संचालित करने की आवश्यकता होती है, भले ही सेवा आधे रास्ते से शुरू करने में विफल रही हो और आस-पास के प्रारंभिक डेटा को छोड़ दिया गया हो। जैसा कि सेवा की प्रक्रियाओं को पहले ही समाप्त कर दिया गया है जब इस सेटिंग के साथ निर्दिष्ट आदेश निष्पादित किए जाते हैं, तो उन्हें उनके साथ संवाद करने का प्रयास नहीं करना चाहिए।

ध्यान दें कि इस सेटिंग के साथ कॉन्फ़िगर किए गए सभी आदेशों को सेवा के परिणाम कोड, साथ ही मुख्य प्रक्रिया 'निकास कोड और स्थिति, $ SERVICE_RESULT, $ EXIT_CODE और $ EXIT_STERUS वातावरण चर में सेट किया गया है, systemd.exec देखें। (5) विवरण के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.