मेरे पास एक वेब सर्वर है जहां मैं कुछ धीमे-प्रारंभिक प्रोग्राम डेमन्स के रूप में चलाता हूं। इन्हें कभी-कभी त्वरित पुनरारंभ करने (या रोकना) की आवश्यकता होती है जब मैं उन्हें पुन: संकलित करता हूं या उनकी दूसरी स्थापना में स्विच करता हूं।अन्य उपयोगकर्ताओं को सरल बैश डिमन्स को रोकने/पुनरारंभ करने दें - सिग्नल का उपयोग करें या क्या?
http://mywiki.wooledge.org/ProcessManagement से प्रेरित होकर, मैं एक स्क्रिप्ट daemonise.sh
बुलाया
#!/bin/sh
while :; do
./myprogram lotsadata.xml
echo "Restarting server..." 1>&2
done
एक चल "डेमॉन" रखने के लिए की तरह लग रहा है कि लिख रहा हूँ। तब शायद
$ ./daemonise.sh & DPID=$!
$ screen -d
मैं MyProgram पुनः संकलित करें, एक नया पथ के लिए इसे स्थापित, शुरू नया एक: जब से मैं कभी कभी इसे रोकने के लिए, या बस यह पुनः आरंभ करने की जरूरत है, मुझे लगता है कि स्क्रिप्ट एक स्क्रीन सत्र में चलाने के लिए, की तरह अप और पुराने वाले को मारने के लिए चाहता हूँ:
$ screen -r
$ kill $DPID
$ screen -d
यह ठीक काम करता है जब मैं केवल मेंटेनर हूँ, लेकिन अब मैं किसी और बंद/कार्यक्रम को पुनः आरंभ, कोई फर्क नहीं पड़ता है जो इसे शुरू कर दिया बताना चाहते हैं। और चीजों को और अधिक जटिल बनाने के लिए, daemonise.sh
स्क्रिप्ट वास्तव में लगभग 16 प्रोग्राम शुरू करता है, जिससे आप अपने पीआईडी को नहीं जानते हैं, तो हर एक को को मारने में परेशानी होती है।
किसी अन्य उपयोगकर्ता को देने का "सर्वोत्तम अभ्यास" तरीका क्या होगा डिमन्स को रोक/पुनरारंभ करें?
मैंने साझा स्क्रीन सत्रों के बारे में सोचा, लेकिन यह सिर्फ हैकी और असुरक्षित लगता है। सबसे अच्छा समाधान मैं अब के लिए लेकर आए हैं शुरू करने और एक स्क्रिप्ट है कि कुछ संकेत पकड़ता में मौत हो गई रैप करने के लिए है:
#!/bin/bash
DPID=
trap './daemonise.sh & DPID=$!' USR1
trap 'kill $DPID' USR2 EXIT
# Ensure trapper wrapper doesn't exit:
while :; do
sleep 10000 & wait $!
done
अब, किसी अन्य उपयोगकर्ता डेमॉन को रोकने के लिए की आवश्यकता चाहिए और मैं यह नहीं कर सकते , उसे सिर्फ रैपर के ढक्कन को जानना है, और उदाहरण के लिए sudo kill -s USR2 $wrapperpid
। (इसके अलावा, यह रीबूट पर डेमन्स चलाने के लिए संभव बनाता है, और फिर भी उन्हें साफ से मारता है।)
क्या कोई बेहतर समाधान है? क्या इस समाधान के साथ स्पष्ट समस्याएं हैं जिन्हें मैं नहीं देख रहा हूं?
+1 ग्रेग के बैश विकी को जोड़ने के लिए +1। सौभाग्य! – shellter
पिड फ़ाइलें सबसे अच्छा सम्मेलन – reconbot
@ जादूगर सही है। आपको एक सार्थक उत्तर नहीं मिलेगा क्योंकि आप मूल रूप से कह रहे हैं "मुझे पता है कि पहिया मौजूद है, लेकिन मैं अपना खुद का आविष्कार करना चाहता हूं"। –