2011-05-29 8 views
9

मेरे पास mandacalc नामक एक बड़ी स्क्रिप्ट है जिसे मैं हमेशा nohup कमांड के साथ चलाना चाहता हूं। अगर मैं इसे कमांड लाइन से कॉल करता हूं:बैश स्क्रिप्ट के अंदर नोहप कैसे शामिल करें?

nohup mandacalc & 

सब कुछ तेजी से चलता है। लेकिन, अगर मैं अपने आदेश के अंदर nohup शामिल करने का प्रयास करता हूं, तो मुझे हर बार इसे निष्पादित करने की आवश्यकता नहीं है, मुझे एक त्रुटि संदेश मिलता है।

nohup (
command1 
.... 
commandn 
exit 0 
) 

और यह भी:

nohup bash -c " 
command1 
.... 
commandn 
exit 0 
" # and also with single quotes. 

अब तक मैं केवल nohup आदेश के कार्यान्वयन के बारे में शिकायत त्रुटि संदेश मिलता है, या अन्य उद्धरण के बारे में

अब तक मैं इन विकल्पों की कोशिश की स्क्रिप्ट के अंदर इस्तेमाल किया।

चीयर्स।

+0

आप पूरा पथ संभवतः nohup को देने की जरूरत है? 'जो नोहुप' – wilbbe01

उत्तर

1

आप सिर्फ nohup ./original_script युक्त एक स्क्रिप्ट क्यों नहीं बनाते?

16

अपनी स्क्रिप्ट की शुरुआत में इस डाल प्रयास करें:

#!/bin/bash 

case "$1" in 
    -d|--daemon) 
     $0 < /dev/null &> /dev/null & disown 
     exit 0 
     ;; 
    *) 
     ;; 
esac 

# do stuff here 

अब आप एक तर्क के रूप --daemon साथ अपनी स्क्रिप्ट शुरू करते हैं, यह अपने आप में अपने वर्तमान खोल से अलग पुनः आरंभ करेगा।

आप अभी भी इस विकल्प के बिना इसे "अग्रभूमि में" अपनी स्क्रिप्ट चला सकते हैं।

+8

बैश बहुत अजीब है –

3

अपने बैश (या पसंदीदा शेल) स्टार्टअप फाइल में एक ही नाम के एक अन्य नाम बनाएँ:

उर्फ ​​mandacalc = "nohup mandacalc &"

1

बस trap '' HUP अपनी स्क्रिप्ट की शुरुआत पर डाल दिया।

अगर यह बच्चे की प्रक्रिया someCommand& बनाता है तो आपको उन्हें ठीक से काम करने के लिए nohup someCommand& में बदलना होगा ... मैं इसे लंबे समय से खोज रहा हूं और केवल इन दोनों (जाल और नोहुप) का संयोजन मेरे काम पर है विशिष्ट लिपि जहां xterm बहुत तेजी से बंद हो जाता है।

3

यहाँ एक अच्छा जवाब है: http://compgroups.net/comp.unix.shell/can-a-script-nohup-itself/498135

#!/bin/bash 

### make sure that the script is called with `nohup nice ...` 
if [ "$1" != "calling_myself" ] 
then 
    # this script has *not* been called recursively by itself 
    datestamp=$(date +%F | tr -d -) 
    nohup_out=nohup-$datestamp.out 
    nohup nice "$0" "calling_myself" "[email protected]" > $nohup_out & 
    sleep 1 
    tail -f $nohup_out 
    exit 
else 
    # this script has been called recursively by itself 
    shift # remove the termination condition flag in $1 
fi 

### the rest of the script goes here 
. . . . . 
संबंधित मुद्दे