2013-09-23 4 views
8

私は、スクリプトが自己daemonizing、シェルプロンプトで手動nohup $SCRIPT &>/dev/null &を呼び出すために、すなわち、不要であることをしたいです。これは賢明です自己daemonizing bashスクリプト

#!/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

@Alfeあなたは正しいです。私は二重引用符を忘れてしまった。それを指摘してくれてありがとう! – pepoluan

答えて

8

これは私が見るものです。

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

それとも

== --daemonize?

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

代わりに、もう一度スクリプトを呼び出すこと

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

Shouln'tは、あなただけの背景に置かれていますサブシェルを召喚でき

function daemon_mode { 
    Codes that run in daemon mode. 
} 

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

最後のバージョンでは括弧の必要はありません。 &のために、新しいサブシェルで関数が実行されます。 –

+0

ああ、そうです。私はちょうど 'function'機能を追加しましたので、私はそれに感謝しませんでした。 – konsolebox

+0

ああ、ありがとう!はい、はるかに優雅に見えます。 '[[" $ 1 "!= - daemonize]]は正しいです。基本的に、スクリプトが '--daemonize'パラメータを使って起動されない場合、' - daemonize'パラメータを渡してスクリプトを起動します。しかし、あなたのソリューションははるかに洗練されていることがわかります。そのため、テストは問題ありません。ありがとうございました! – pepoluan

関連する問題