सवाल अपस्टार्ट स्क्रिप्ट और स्टार्ट-स्टॉप-डिमन


मुझे एक मुद्दा था जहां अपस्टार्ट स्क्रिप्ट बनाना कई बार स्क्रिप्ट को कॉल करेगा, जिससे मेरा आईआरसीडी लगभग 8 गुना बढ़ जाएगा। इसे सुधारने के लिए, मैंने स्टार्ट-स्टॉप-डिमन का उपयोग किया:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

यह ठीक वैसे ही काम करता है जैसा मैं चाहता हूं, इसके अलावा:

stop ircd

कहता है कि यह इसे रोकता है, लेकिन प्रेरक अभी भी बाद में चल रहा है।

क्या स्टार्ट-स्टॉप-डिमन का उपयोग करने का एक बेहतर तरीका है जो स्क्रिप्ट को 8 उदाहरण खोलने से रोक देगा, या क्या कोई तरीका है कि मैं इसे स्टार्ट-स्टॉप-डिमन के साथ संगत बना सकता हूं?


8
2017-12-21 15:59


मूल




जवाब:


मैं पूरी तरह से यकीन नहीं कर सकता लेकिन प्रेरणादायक हो सकता है जब यह चल रहा है तो अपस्टार्ट यह नहीं जानता कि इसकी पीआईडी ​​वास्तव में कहां है। यदि ऐसा है, तो इसे ठीक किया जा सकता है क्योंकि अपस्टार्ट में फोर्किंग प्रक्रियाओं को संभालने के लिए दो स्टेन्ज़ा हैं:

  • expect fork कैच प्रक्रिया करता है कि एक बार कांटा (इमो, सबसे अधिक संभावना यहां मामला)।
  • expect daemon उन चीजों को पकड़ता है जो दो बार बाहर निकलते हैं ... यह कौन सा है हो सकता है कर रही हो।

तो इसे आजमाएं:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

और अगर यह काम नहीं करता है, तो मेरी जांच करें suयह सुनिश्चित करने के लिए कि यह कमांड लाइन से काम करता है और फिर बदलें expect fork सेवा मेरे expect daemon और इसे एक और घुमाओ।


संपादित करें bash रैपर अच्छा से ज्यादा नुकसान कर रहा है। यह एक बेहतर निष्पादन हो सकता है:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

6
2017-12-21 16:25



धन्यवाद! यह अधिक अच्छी तरह से काम करता है, और हाँ expect fork मुद्दा तय किया। हालांकि, मैं अभी भी 'स्टॉप ircd' को कॉल नहीं कर सकता और स्क्रिप्ट रोक सकता हूं। हालांकि, मैं इसके बिना प्रबंधन करूँगा (पीएस ऑक्स, मारो), लेकिन अगर आप ऐसा करने का एक तरीका शामिल करने के लिए अपना जवाब संशोधित कर सकते हैं, तो मैं उबंटू उपयोगकर्ता से बहुत खुश हूं;) - Liam Dawson
हम्म - जब आप दौड़ते हैं sudo start ircd इसे एक पीआईडी ​​आउटपुट करना चाहिए। यदि आप इसे अंत में चिपकते हैं ps (उदाहरण: ps u -p <PID>) क्या यह एक ऐसी प्रक्रिया दिखाता है जो समझ में आता है? अगर ऐसा नहीं होता है तो यह अभी भी पीआईडी ​​का ट्रैक खो रहा है ताकि आप कोशिश कर सकें expect daemon - Oli♦
असल में, यह एक पीआईडी ​​आउटपुट नहीं करता है, बस कुछ कंसोल आउटपुट। ओह अच्छा, ps aux, kill <pid> ठीक काम करता है, मैं स्क्रिप्ट स्टार्ट को बूट पर बनाने के बारे में अधिक चिंतित था, जो यह करता है। धन्यवाद! - Liam Dawson