जवाबों:
OnFailure=
अनुभाग में एक निर्देश है [Unit]
, जिसे systemd.unit (5) में प्रलेखित किया गया है । इसे निम्नानुसार परिभाषित किया गया है:
एक या एक से अधिक इकाइयों की एक अंतरिक्ष-पृथक सूची जो इस इकाई के "विफल" होने पर सक्रिय होती है।
(इसके अलावा OnFailureJobMode=
उसी अनुभाग में एक निर्देश है जो ऑनफ़ेल्योर = इकाइयों को सक्रिय करने के लिए नौकरी मोड सेट करने की अनुमति देता है।)
/etc/systemd/system
और OnFailure=
निर्देश में इसका नाम रखें ।
आप 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) विवरण के लिए।