ऊपरवाला मेरी प्रक्रिया का सम्मान क्यों करता है?


19

मैंने tmux सेशन के अंदर एक डेमन को लॉन्च करने के लिए एक अपस्टार्ट स्क्रिप्ट लिखी। यह अच्छी तरह से काम करता है और अगर यह अप्रत्याशित रूप से मर जाता है, तो इस प्रक्रिया का सम्मान करता है, लेकिन मैं इसे मैन्युअल रूप से रोक नहीं सकता।

नौकरी (जिसे बुक्किट कहा जाता है) इस तरह दिखाई देती है:

start on filesystem
stop on runlevel [!2345]

respawn
respawn limit 5 30

chdir /home/minecraft/bukkit

expect daemon
kill timeout 30

pre-start script
    test -x /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar || { stop; exit 0; }
end script

pre-stop script
    tmux send -t bukkit "stop"
    tmux send -t bukkit "Enter"
    sleep 10  # Wait for server to shut down properly
end script

exec tmux new-session -d -s minecraft -n bukkit "sudo -u minecraft -- /home/minecraft/java/jre1.6.0_27/bin/java -Xincgc -Xmx1G -jar /home/minecraft/bukkit/craftbukkit-0.0.1-SNAPSHOT.jar"

जब मैं stop bukkitइसे जारी करता हूं तो यह ~ 10 सेकंड (स्लीप टाइमर, मुझे लगता है) और प्रिंट के लिए जमा देता है bukkit start/running, process 2391। जब मैंने डीबग करना शुरू किया, तो मुझे लॉग में ये संबंधित लाइनें मिलीं:

Sep 21 19:14:59 cheftest init: bukkit goal changed from start to stop
Sep 21 19:14:59 cheftest init: bukkit main process (2499) exited normally
Sep 21 19:14:59 cheftest init: bukkit main process ended, respawning
Sep 21 19:14:59 cheftest init: bukkit goal changed from stop to respawn

जब इसे रोकना चाहिए तो ऊपरवाला मेरी प्रक्रिया का सम्मान क्यों करता है?

जवाबों:


23

यहाँ कठिनाई एक पूर्व-स्टॉप स्क्रिप्ट के साथ 'रिस्पना' का संयोजन है जो रोकने की प्रक्रिया बताती है। Init (5) से:

   respawn
         A service or task with this stanza will be automatically started
         if it should stop abnormally.  All reasons for a service stopping,
         except the stop(8) command itself, are considered abnormal.  Tasks
         may exit with a zero exit status to prevent being respawned.

दस्तावेज़ इस बिंदु पर थोड़ा अस्पष्ट है कि क्या शून्य से बाहर निकलने की स्थिति के साथ बाहर निकलना एक प्रतिक्रिया का कारण होना चाहिए। हालाँकि, मूल रूप से आपको एक अपस्टार्ट बग मिला है क्योंकि लक्ष्य 'स्टॉप' होने पर समाप्त होने वाली मुख्य प्रक्रिया 'रिस्पना' में बदलाव नहीं होनी चाहिए।

इस बग के चारों ओर काम करने के लिए, आपको "सामान्य निकास" का उपयोग करने में सक्षम होना चाहिए ताकि यह बताया जा सके कि यह काम रोकने का एक सामान्य तरीका है और यह प्रतिक्रिया नहीं करना चाहिए।

  normal exit STATUS|SIGNAL...
         Additional exit statuses or even signals may be added, if the
         job process terminates with any of these it will not be considered
         to have failed and will not be respawned.

         normal exit 0 1 TERM HUP

ध्यान दें कि सामान्य रूप से, सिग्नल के साथ प्रक्रिया को मारने के लिए यह अधिक मजबूत होगा (निर्दिष्ट करने पर "किल सिग्नल एन" यदि आवश्यक हो) पूर्व-स्टॉप प्रक्रिया के साथ आदेश जारी करता है; लेकिन निश्चित रूप से यह हमेशा संभव नहीं होता है यदि सेवा सिग्नल मिलने पर स्वच्छ शटडाउन का समर्थन नहीं करती है।


धन्यवाद, वह काम-काज मेरे मामले के लिए पूरी तरह से काम करता है। मुझे इसके लिए एक बग रिपोर्ट मिली , लेकिन ऐसा लगता है कि यह व्यवहार वास्तव में होशपूर्वक बनाया गया है।
पैसेंजर्स

स्कॉट जेम्स रेमनेंट का उत्तर सही है - यह एक बग है, एक डिजाइन निर्णय नहीं है, जिसे संदर्भित किया गया परीक्षण मामला कुछ और परीक्षण करने के लिए है :)
slangasek

3

किसी और के यहाँ समाप्त होने की स्थिति में मैंने बग पर काम करने वाला पैच जमा कर दिया है:

https://bugs.launchpad.net/upstart/+bug/568288/comments/6


उबंटू पूछने के लिए आपका स्वागत है! जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना बेहतर होगा , और संदर्भ के लिए लिंक प्रदान करना होगा।
पीच

2

इसके लिए upstart 1.10 में एक फिक्स जारी किया गया था, इसलिए अब ऐसा नहीं होना चाहिए।


यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका अनुरोध करने के लिए, उनके पोस्ट के नीचे एक टिप्पणी छोड़ दें।
एएमसी

2
मुझे इस पर पूरा यकीन नहीं है। मेरा उत्तर यह कहने के बराबर है: ऐसा इसलिए होता है क्योंकि आप एक पुराने संस्करण का उपयोग कर रहे हैं जिसमें बग था, इसे ठीक करने के लिए संस्करण १.१० या नए का उपयोग करें। ऐसा कुछ जो अन्य उत्तर में से कोई भी नहीं है, और वास्तव में सबसे उपयोगी उत्तर अब यह है कि फिक्स जारी किया गया है और वर्कअराउंड के लिए बहुत कम कारण है।
cccrack

मैं मानता हूँ यह उपयोगी है, लेकिन मुझे लगता है कि यह स्वीकार किए जाते हैं जवाब देने के लिए एक टिप्पणी के रूप में अधिक उपयोगी है
एएमसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.