web-dev-qa-db-ja.com

バックグラウンドで複数のNohupコマンドを実行する

2つのコマンドcmd1とcmd2を取得しました。 2つのうち、cmd2の完了には時間がかかります。 cmd2を実行してからcmd1を実行する必要があります。

次の方法でそれらを実行しようとしました:

bash$ (Nohup ./cmd2>result2 &) && Nohup ./cmd1>result1 &

または

bash$ (Nohup ./cmd2>result2 &) ; Nohup ./cmd1>result1 &

しかし、どちらの場合も、cmd1はcmd2が完了するのを待っておらず、result1がいっぱいになっていることがわかります。

両方をNohupプロセスにしてバックグラウンドで実行する必要があるときに、cmd2の後にcmd1を実行する方法は?

12
user33767

両方作成しましたcmd1およびcmd2並列実行します。 「cmd2をバックグラウンドで起動し、cmd2との関連付けをすべて解除します。 cmd1をバックグラウンドで開始し、cmd1との関連付けをすべて解除します。」つまり、「cmd2をバックグラウンドで開始します。それが完了したら、cmd1を開始します(これもバックグラウンドで)。」バックグラウンドタスクとの関連付けがなくなったため、cmd2を実行してからcmd1を実行するバックグラウンドタスクを考案する必要があります。これは cmd2; cmd1 (というより cmd2 && cmd1は、cmd2が成功した場合にのみcmd1を実行します。そのため、バックグラウンドで実行されているシェルを開始するようにNohupに指示する必要があります。

Nohup sh -c './cmd2 >result2 && ./cmd1 >result1' &

Nohupを使用しなくてもかまわない場合:

{ command1 >result1 2>&1 && command2 >result2 2>&1 ; } & disown
3
artyom

単に使用する:

Nohup ./cmd2>result2 & Nohup ./cmd1>result1 & Nohup ./cmd3>result3 &
2
Rahul Patil

cmd2とcmd1で正確に何をしているのかをお知らせください。これは、タスクのタイプとコマンドからの出力に依存します。コマンドでキーを2回押すことで問題が発生している場合は、これで理解できます post

この方法でも行くことができます

Nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null & 

以下のスクリーンショットを参照してください。ここでは3つのコマンドを使用しており、すべてが1つずつ順番に実行されています。このタスクにはバックティックを使用しました。スクリーンショットでは、日付のタイムスタンプも確認できます。 sleepコマンドには60秒ありますが、60秒後に次のコマンドが正常に実行されます。ジョブコマンドを使用して、バックグラウンドで実行中のコマンドを確認しました。ここではありません。あなたが見ることができる仕事の1です。

Nohup-multiple-command

このスクリーンショットは、この link でも利用できます(表示されていない場合)

0
Sharad Chhetri