पृष्ठभूमि
मुझे systemd
एक नई सेवा के लिए एक स्क्रिप्ट बनाने के लिए कहा गया है foo_daemon
, जो कभी-कभी एक "खराब स्थिति" में हो जाती है, और SIGTERM
(कस्टम सिग्नल हैंडलर के कारण) होने की संभावना नहीं होगी । डेवलपर्स के लिए यह समस्याग्रस्त है, क्योंकि उन्हें सेवा शुरू / बंद करने / फिर से शुरू करने का निर्देश दिया जाता है:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
मुसीबत
कभी-कभी, foo_daemon
एक बुरी स्थिति में होने के कारण , हमें जबरन इसे मारना पड़ता है:
systemctl kill -s KILL foo_daemon.service
सवाल
मैं अपनी systemd
स्क्रिप्ट को कैसे सेट कर सकता हूं foo_daemon
ताकि, जब भी कोई उपयोगकर्ता सेवा को रोकने / पुनः आरंभ करने का प्रयास systemd
करेगा , वह करेगा:
- के
foo_daemon
माध्यम से एक सुंदर बंद का प्रयास करेंSIGTERM
। - शटडाउन / समाप्ति के लिए 2 सेकंड तक का समय दें
foo_daemon
। - यदि प्रक्रिया अभी भी जीवित है, तो इसके
foo_daemon
माध्यम से एक मजबूर शटडाउन का प्रयास करेंSIGKILL
(इसलिए हमारे पास पुनर्नवीनीकरण होने का खतरा नहीं है और गलत पीआईडी के खिलाफsystemd
मुद्देSIGKILL
हैं)। जिस उपकरण का हम परीक्षण कर रहे हैं, वह कई प्रक्रियाओं को तेजी से आगे बढ़ा रहा है, इसलिए पीआईडी रीसाइक्लिंग के बारे में एक दुर्लभ लेकिन बहुत ही वास्तविक चिंता का कारण है। - अगर, व्यवहार में, मैं सिर्फ पीआईडी रीसाइक्लिंग के बारे में पागल हो रहा हूं, तो मैं ठीक हूं कि स्क्रिप्ट के साथ
SIGKILL
प्रक्रिया के खिलाफ जारी करने के बिना जारी किए गए पीआईडी की पुनरावृत्ति की परवाह किए बिना पीआईडी।