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を実行する方法は?
両方作成しました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
単に使用する:
Nohup ./cmd2>result2 & Nohup ./cmd1>result1 & Nohup ./cmd3>result3 &
cmd2とcmd1で正確に何をしているのかをお知らせください。これは、タスクのタイプとコマンドからの出力に依存します。コマンドでキーを2回押すことで問題が発生している場合は、これで理解できます post
この方法でも行くことができます
Nohup `cmd2 && ccmd1` > Output.out 2> Error.err < /dev/null &
以下のスクリーンショットを参照してください。ここでは3つのコマンドを使用しており、すべてが1つずつ順番に実行されています。このタスクにはバックティックを使用しました。スクリーンショットでは、日付のタイムスタンプも確認できます。 sleepコマンドには60秒ありますが、60秒後に次のコマンドが正常に実行されます。ジョブコマンドを使用して、バックグラウンドで実行中のコマンドを確認しました。ここではありません。あなたが見ることができる仕事の1です。
このスクリーンショットは、この link でも利用できます(表示されていない場合)