16

nohupコマンドで常に実行したいmandacalcという大きなスクリプトがあります。コマンドラインから次のように呼び出す場合:

nohup mandacalc &

すべてが迅速に実行されます。しかし、コマンド内にnohupを含めようとすると、実行するたびに入力する必要がなくなり、エラー メッセージが表示されます。

これまでのところ、次のオプションを試しました。

nohup (
command1
....
commandn
exit 0
)

また:

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

これまでのところ、 nohupコマンドの実装、またはスクリプト内で使用されている他の引用符について不平を言うエラー メッセージしか表示されません。

乾杯。

4

5 に答える 5

23

これをスクリプトの先頭に置いてみてください:

#!/bin/bash

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

# do stuff here

スクリプトを--daemon引数として開始すると、現在のシェルから切り離されて再起動します。

このオプションを指定せずにスクリプトを開始すると、スクリプトを「フォアグラウンドで」実行できます。

于 2011-05-29T16:47:20.730 に答える
5

trap '' HUPスクリプトの冒頭に置くだけです。

また、子プロセスを作成するsomeCommand&場合は、それらを適切に機能させるために変更する必要がありnohup someCommand&ます...私はこれを長い間研究してきましたが、これら2つの組み合わせ(trapとnohup)のみが、xtermも閉じる私の特定のスクリプトで機能します速い。

于 2013-06-11T05:29:11.303 に答える
5

bash (または優先シェル) 起動ファイルに同じ名前のエイリアスを作成します。

alias mandacalc="nohup mandacalc &"
于 2011-05-29T17:05:59.410 に答える
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" "$@" > $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
. . . . .
于 2015-07-04T12:41:54.333 に答える
3

を含むスクリプトを作成してみませんnohup ./original_scriptか?

于 2011-05-29T16:18:59.323 に答える