nohup は、バックグラウンド プロセスが完了したりエラーが発生した場合に電子メール通知を送信します。

nohup は、バックグラウンド プロセスが完了したりエラーが発生した場合に電子メール通知を送信します。

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され削除されます。

関連情報