画面上のタスクがいつ完了したかをどうやって知ることができますか?

画面上のタスクがいつ完了したかをどうやって知ることができますか?

スクリーンセッション内で実行されたスクリプトが完了したかどうかはわかりますか?と入力してスクリプトを表示できます。スクリプトが完了したら終了したいとjobs思います。screen sessionどうすればいいですか?それとも、スクリプトが正常に実行された後に画面を自動的に終了させることはできますか?一度に72のスクリーンセッションを実行しているので、これを手動で実行するのは便利ではありません。スクリーンセッションでジョブのステータスを自動的に確認して印刷しstdout、実行中のジョブが完了したらセッションを終了する方法があればscreenよいでしょう。

答え1

コマンド1と2を接続するだけですyour_scriptkill this screen session

それをfoo.shあなたのスクリプトにしてください。スクリーンセッションを終了するコマンドはですkill。 shell / bashコマンドが現在進行中のscreenセッションを終了させるにscreen -Xは、screenセッションで実行されたコマンドを使用します。screen -X killあなたはでしょう

screen -S the_session_for_my_job

スクリーンセッションを作成すると

/path/to/foo.sh; screen -X kill

これにより、ウィンドウの数に関係なくスクリーンセッションが終了し、foo.shが完了した後に終了します。

より洗練されたアプローチは、プロセスIDを観察し、特定のPIDが消えたときにkillコマンドを実行することです。

監視するプロセスのPIDを12345に設定します。それからあなたはそうでしょう

while ps a | grep ^12345;do sleep 2; done; screen -X kill

whileループは、プロセスリストにPID 12345を持つプロセスがあるかどうかを監視します。これらのプロセスが存在する場合は、2秒間スリープ状態を維持してからもう一度確認してください。そのPIDを持つプロセスがない場合、whileループは終了します。次に kill コマンドを実行します。

答え2

私は次の内容を含む電子メールを使用します。

command | mail-s job_output [email protected]; exit

または、すでに実行している場合は、完了時に実行するコマンドを入力(または出力が多い場合はコピーして貼り付け)できます。

echo $STY done | mail -s job_done [email protected]; exit

関連情報