nohupを介して実行されているバックグラウンドプロセスが失敗または完了したら、どのように電子メールを送信しますか? forループでnohupを介して多くのバックグラウンドプロセスを実行しています。
for afolder in $dir/dothis*
do
nohup nice COMMAND afolder &
done
バックグラウンドプロセスのためだと思います。
nohup nice COMMAND afolder & ; tail nohup.out | mail [email protected] -s "job done"
完了した時点ではなく実行されたときに電子メールを受け取ります。プロセスが完了していないか正常に完了したかによって、別の電子メールの件名を送信するにはどうすればよいですか?
よろしくお願いします!
答え1
1つのオプションは、バックグラウンドタスクでメール転送を実行することです。
for afolder in "$dir"/dothis*; do
nohup sh -c '
outfile=$(mktemp)
if nice COMMAND "$1" >"$outfile" 2>&1; then
success_or_fail="success"
else
success_or_fail="failure"
fi
tail "$outfile" |
mail -s "job done ($success_or_fail)" [email protected]
rm "$outfile"' sh "$afolder" &
done
これはあなたと同じループを実行しますが、下で実行される下付き文字を開始しますnohup
。スクリプトは$afolder
最初のコマンドライン引数として現在の値を使用し、ステートメントif
でコマンドを実行します。success_or_fail
コマンドの結果に基づいて適切な設定を指定してから電子メールを送信します。
コマンドのすべての出力は一時ファイルにリダイレクトされ、tail
シェルが終了すると電子メールは-edされ削除されます。