2012-05-04 7 views

答えて

-1

&オペレータを使用してバックグラウンドで開始します。

(a)の実行が完了するか、(b)は、あなたがそれまたは(c)システムを再起動殺すまでこれが継続されます./abc.sh &これを行うためのいくつかの方法が、neatest方法はあり

+3

これは正しくありません。ログアウトするとこれが止まります。これを防ぐには 'nohup'を使うことができますが、私は画面を優先します。 – Benj

4

screenを使用することです。これにより、マシン上に永続的に存在するセッションを作成し、再接続して長時間実行されているプロセスの進行状況を確認することができます。

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

nohup mytask &

あなたの仕事は今、バックグラウンドで実行され、ログをオフに生き残るだろう、 screenとは異なり、もう一度それを制御する方法はありません。

+0

スクリーン入力Benjのおかげで。あなたの助けに感謝! – Satya

+0

私は一定の条件を連続的にチェックする必要がある小さなスクリプトを用意しています。その条件が満たされるとすぐにプログラムを実行する必要があります。これはできますか?私はスクリプトが5分ごとに実行されるところでcrontabを使うことを考えましたが、今はcrontabなしでそれをやりたいと思っています。 – Atul

1

上記のようにバックグラウンドで起動するだけでなく、 'nohup'を使用する必要があります。これは、たとえあなたが端末を閉じても、実行を継続することを意味します。これは、あなたがデーモンとしてスクリプトを実行することができる方法である./abc.sh &

1
if [ "x$1" != "x--" ]; then 
$0 -- 1> /dev/null 2> /dev/null & 
exit 0 
fi 

nohupを。最初にあなたの脚本(父親)は自分自身のコピー(子供)を作成し、父親のプロセスとして考慮します。子供がまだ走っている間、父はそれ自身を殺します。あなたがそのようなことをしたらどうなるのでしょうか?子プロセスはinitプロセスにアタッチされます。したがって、ログアウトしてもスクリプトは実行されます。 "&"演算子を使わずに起動することもできます。なぜなら、父親は、1ミリ秒後に殺されるからです。
あなたのコンピュータ上で実行されているプログラムのように、もう一度それを制御することができます。

実際の「デーモン」プログラムではありませんが、エミュレーションのようなものです。ログイン時に起動したい場合は、起動時に起動するだけでは(ブートではなくログオンを意味します)、簡単に入れてください。.xinitrc

このソリューションの主な利点は、あなたのスクリプトは "nohup"のような他のプログラムに依存しません。これは本当に悪いと思います。

ありがとうございます
PS:上記のコマンドに関する情報が必要な場合は、私に尋ねてください。それはちょうど "パラメータ"のものです。

+0

どうしたらいいのか教えてください。実際には、一定の条件を連続的にチェックする必要がある小さなスクリプトがあります。その条件が満たされるとすぐにプログラムを実行する必要があります。これはできますか?私はスクリプトが5分ごとに実行されるcrontabを使用することを考えましたが、現在はcrontabなしで実行したいと考えています – Atul

+0

それが継続的に実行されるスクリプトでない場合は、cronを使用する必要があります。 私の投稿の最初に与えた条件の説明は次のとおりです: プログラムの最初の引数が " - "でない場合:引数 " - "を指定して同じスクリプトを実行し、エラーは別の場所にリダイレクトされます/ dev/nullはゴミ箱のフォルダです)と標準出力です。 その後、終了します。 無限に実行するには[true]を長押しします。あなたのwhileループでは、スリープ機能を必要な時間(あなたのために5分)だけ追加し、その後は通常のbashスクリプトです。 ここに例があります:http://pastebin.com/us76BRKj – Depado

+0

runing中にnohupでこれを実行する必要がありますか? – Atul

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 

注:あなたが実行している他のバックグラウンドジョブを持っていれば、あなただけのこの特定のジョブを否認するジョブ仕様を提供する必要があります。代わりに、あなたが見たい場合は、[1] [2]あなたが一時停止し、バックグラウンドにプロセスを送ったとき、あなたは代わりにdisown -h %2言うだろうの

prompt> disown -h %1 

+0

+1事実の後にnohupを使う方法について。私はそれを知らなかった。 – Benj

+0

ありがとうございます。また、最初にnohupで起動していないプロセスに対してSIGHUPが送信されないようにするための説明を追加しました。 –

関連する問題