0

crontab を使用せずにバックグラウンドでスクリプトを継続的に実行する方法を教えてください。スクリプトはログアウト後も実行されるはずであり、システムの再起動後にスクリプトが開始されない場合でも問題ありません。Unix は初めてです。

4

5 に答える 5

4

これを行うにはいくつかの方法がありますが、最も簡単な方法はscreenを使用することです。これにより、マシン上で永続的に存続するセッションを作成でき、に再接続するだけで、長時間実行されているプロセスの進行状況を確認できます。

使用したくない場合は、これを使用しscreenて次nohupのようなタスクを実行できます。

nohup mytask &

これで、タスクはバックグラウンドで実行され、ログオフ後も存続しますが、とは異なり、タスクを再度制御する方法はありませんscreen

于 2012-05-04T08:22:59.840 に答える
2

他の人が前に述べたように、プロセスがハングアップ信号を受信しないようにするには、nohup を使用する必要があります (したがって、no-h-up)。

ただし、そもそもバックグラウンドでプロセスを開始すると、

prompt> nohup process &

これには、プロセスを開始するために必要なデータを入力できないという欠点があります。これは、パスワード/資格情報、またはプロセスに必要なその他の入力である可能性があります。

その要件がある場合は、最後に「&」を付けずに開始し、入力を入力してから Ctrl-Z を押してプロセスをスリープ状態にします。バックグラウンドに送信するには、プロンプトで「bg」と入力して Enter キーを押します。

prompt> nohup process
Enter password:
(Now press Ctrl-Z)
[1]+  Stopped                 process
prompt> bg
[1]+ process &

ログオフしても、プロセスはバックグラウンドで実行され続けます。

または、bash または zsh を使用している場合、最初に nohup でプロセスを開始しなかった場合、プロセスを強制終了して再起動するオプションがない場合は、組み込みの disown コマンドを使用できます。最初にプロセスを一時停止してバックグラウンドにします。そして、ハングアップ信号が到達するのを止めます。

prompt> process
Enter password:
(Now press Ctrl-Z)
[1]+  Stopped                 process
prompt> bg
[1]+ process &
prompt> disown -h

注: 他のバックグラウンド ジョブを実行している場合は、この特定のジョブのみを否認するためにジョブ仕様を提供する必要があります。

prompt> disown -h %1

[1] の代わりに、プロセスを一時停止してバックグラウンドに送信したときに [2] が表示された場合は、代わりに言うでしょうdisown -h %2

于 2012-05-04T11:25:44.090 に答える
2
if [ "x$1" != "x--" ]; then
$0 -- 1> /dev/null 2> /dev/null &
exit 0
fi

これは、スクリプトをデーモンとして実行する方法です。まず、スクリプト (父親) が自分自身 (子供) のコピーを作成するため、父親のプロセスと見なされます。その後、子供がまだ走っている間に父親が自殺します。あなたがそのようなことをするとどうなるでしょうか?子は init プロセスに接続されます。そのため、ログアウトしてもスクリプトは引き続き実行されます。ミリ秒後に殺される父親を起動するため、「&」演算子なしで起動することもできます。
コンピューターで実行されている他のプログラムと同じように、再び制御することができます。

ところで、これは本当の「デーモン」プログラムではなく、一種のエミュレーションです。ログイン時に起動したい場合は、起動時に起動することはできません(ログインではなく起動を意味します)。.xinitrc

このソリューションの主な利点は、スクリプトが「nohup」などの他のプログラムに依存しないことです。これは本当に悪いことだと思います。

よろしく
PS : 上記のコマンドが何をするかについての情報が必要な場合は、私に聞いてください。それは単なる「パラメータ」です。

于 2012-05-04T09:56:41.417 に答える
1

上記のようにバックグラウンドで起動するだけでなく、「nohup」を使用する必要がある場合があります。これは、ターミナルを閉じても実行し続けることを意味します。

nohup ./abc.sh &

于 2012-05-04T08:27:18.973 に答える
-1

& 演算子を使用してバックグラウンドで開始します。

./abc.sh & これは、(a) 実行が完了するか、(b) 強制終了するか、(c) システムが再起動するまで続きます

于 2012-05-04T08:22:20.540 に答える