2013-09-23 2 views
8

मैं एक स्क्रिप्ट आत्म daemonizing, जैसे कि, nohup $SCRIPT &>/dev/null & मैन्युअल सुरक्षा प्रॉम्प्ट पर लागू करने की कोई जरूरत नहीं होने के लिए करना चाहते हैं।स्व daemonizing बैश स्क्रिप्ट

#!/bin/bash 
SCRIPTNAME="$0" 

... 

# Preps are done above 
if [[ "$1" != "--daemonize" ]]; then 
    nohup "$SCRIPTNAME" --daemonize "${PARAMS[@]}" &>/dev/null & 
    exit $? 
fi 

# Rest of the code are the actual procedures of the daemon 

इस बुद्धिमान है:

मेरे योजना निम्नलिखित की तरह कोड का एक खंड बनाने के लिए है? क्या आपके पास बेहतर विकल्प हैं?

+1

आपको डबल का उपयोग करना चाहिए लगभग $ $ SCRIPTNAME' और '$ 1' कम से कम उद्धरण; अन्यथा यदि आप इन मानों में रिक्त स्थान हैं तो आप परेशानी में भाग लेते हैं। – Alfe

+0

@ एल्फ आप सही हैं। मैं डबल उद्धरण भूल गया। यह बात बताने के लिए धन्यवाद! – pepoluan

उत्तर

8

यहां कुछ चीज़ें हैं जो मैं देखता हूं।

(
    Codes that run in daemon mode. 
) </dev/null >/dev/null 2>&1 & 
disown 

या

:

if [[ $1 != "--daemonize" ]]; then 

Shouln't कि हो == --daemonize?

nohup $SCRIPTNAME --daemonize "${PARAMS[@]}" &>/dev/null & 

इसके बजाय अपनी स्क्रिप्ट फिर से बुलाने की, तो आप सिर्फ एक subshell कि एक पृष्ठभूमि में रखा है बुलाने सकता है

function daemon_mode { 
    Codes that run in daemon mode. 
} 

daemon_mode </dev/null >/dev/null 2>&1 & 
disown 
+2

अंतिम संस्करण में कोष्ठक की कोई आवश्यकता नहीं है। किसी भी तरह से नए सबहेल में फ़ंक्शन चलाया जाएगा। –

+0

ओह हाँ। मैंने अभी 'फ़ंक्शन' सुविधा जोड़ा है, इसलिए मैंने इसे बहुत धन्यवाद नहीं दिया। – konsolebox

+0

आह, धन्यवाद! हां यह बहुत अधिक सुरुचिपूर्ण लग रहा है। '[[" $ 1 "! = - डिस्मोनाइजेशन]] 'सही है। असल में, यदि स्क्रिप्ट को '--daemonize' पैरामीटर का उपयोग करके नहीं बुलाया जाता है, तो यह' --daemonize' पैरामीटर को पारित कर देगा। हालांकि, मैं देख सकता हूं कि आपका समाधान अधिक सुरुचिपूर्ण है, इसलिए परीक्षण मंथन है। धन्यवाद! – pepoluan

संबंधित मुद्दे