web-dev-qa-db-ja.com

Nohupをbashスクリプトに含める方法は?

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

Nohup mandacalc &

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

これまでのところ、私はこれらのオプションを試しました:

Nohup (
command1
....
commandn
exit 0
)

そしてまた:

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

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

乾杯。

11
felipebm

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

#!/bin/bash

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

# do stuff here

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

このオプションなしでスクリプトを開始することにより、スクリプトを「フォアグラウンドで」実行することができます。

18
user3850

Bash(または優先シェル)スタートアップファイルに同じ名前のエイリアスを作成します。

alias mandacalc="Nohup mandacalc &"
4
Phil

ここにいい答えがあります: 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
. . . . .
3
dashohoxha

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

3
cnicutar

スクリプトの最初にtrap '' HUPを置くだけです。

また、子プロセスsomeCommand&を作成する場合は、正しく機能させるためにNohup someCommand&に変更する必要があります...私はこれを長い間研究しており、これら2つの組み合わせ(トラップとNohupのみ) )xtermのクローズが速すぎる特定のスクリプトで動作します。

2
Aquarius Power