0

リモートサーバーで2つのテストを実行しています。これは、数時間前に使用したコマンドです。

% ./test1.sh; ./test2.sh

2つのテストは1つずつ実行されることになっています。最初のテストが完了する前に2番目のテストを実行すると、すべてが台無しになり、手順全体を再開する必要があります。

ジレンマは、これら2つのタスクを完了するのに時間がかかりすぎることと、サーバーからログアウトして結果を待つ準備をするときです。両方をバックグラウンドに切り替える方法がわかりません...を使用するCtrl+Zと、最初のタスクのみが一時停止され、2番目のタスクは現在のデータを消去するときに何の役にも立ちません。

両方をバックグラウンドに切り替えて、注文を保持することは可能ですか?実際に、これら2つのタスクをのように同じプロセスグループで作成する必要があります(./test1.sh; ./test2.sh) &が、残念ながら、最初のテストは数時間実行されており、テストを再開するのは非常に残念です。

オプションは、開始する前に2番目のテストを強制終了することですが、これに対処するメカニズムはありますか?

4

2 に答える 2

1

まず、の名前をに変更./test2.sh./test3.shます。次に、を実行し[CTRL+Z]、その後にbgとを続けdisown -hます。次に、このスクリプトを保存します(test4.sh):

while :; do
  sleep 5;
  pgrep -f test1.sh &> /dev/null
  if [ $? -ne 0 ]; then
   nohup ./test3.sh &
   break
  fi
done

次に実行します:nohup ./test4.sh &

ログアウトできます。

于 2013-01-11T08:02:16.303 に答える
0

まず、screenまたはtmuxは、まだ作業していない場合は、ここでの友達です(リモートマシンの作業が桁違いに簡単になります)。

条件付き連続実行を使用するには、次のように記述できます。

./test1.sh && ./test2.sh

test2.shこれは、0で返される場合にのみ実行さtest1.shれます(通常の意味:エラーなし)。例:

$ true && echo "first command was successful"
first command was successful

$ ! true && echo "ain't gonna happen"

制御演算子の詳細:http ://www.humbug.in/docs/the-linux-training-book/ch08s01.html

于 2013-01-11T07:50:35.870 に答える