मैंने सिस्टमड सर्विस मैनपेज को कुछ बार पढ़ा है, लेकिन मैं अभी भी एक बुनियादी सिस्टमड पैटर्न का पता नहीं लगा सकता:
मैं एक बार स्टार्टअप प्रक्रिया (जैसे डॉकटर कंटेनर, या ड्राइव को प्रारूपित करना) को सफलतापूर्वक पूरा करना चाहता हूं। लेकिन अगर मैं इसके लिए Type = oneshot का उपयोग करता हूं, तो मैं Restart = on-विफलता का उपयोग नहीं कर सकता हूं, और यदि यह विफल रहता है, तो यह नौकरी को वापस नहीं लेगा। क्या में यहां कुछ भूल रहा हूँ?
मैंने Restart = on-विफलता के साथ टाइप = सिंपल सेट करने की भी कोशिश की, लेकिन कई मामलों में मुझे निम्नलिखित व्यवहार (मैनपेज से) की आवश्यकता होती है जो ऑनशॉट सेवाएं देते हैं:
Oneshot का व्यवहार सरल के समान है; हालाँकि, यह अपेक्षित है कि सिस्टम को फॉलो-अप इकाइयों को शुरू करने से पहले प्रक्रिया से बाहर निकलना होगा।
अपडेट:
Restart=
सेटिंग FailureAction=[self.unit]
(इकाई के नाम के साथ [self.unit) को प्रतिस्थापित करके उसी चीज़ को प्राप्त करने में सक्षम हो सकता है । यह हैकरी की तरह है, लेकिन कम से कम स्पष्ट और अनुसरण करने में आसान है।
FailureAction
समान मान लेता है StartLimitAction
, और सभी को छोड़कर none
किसी प्रकार का बंद ट्रिगर होता है।
Restart
और लपेटनाmy_cmd
है:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'
कुछ उचितTimeoutStartSec
मूल्य के साथ।