0

特定の順序で実行する必要がある分析のいくつかのステップを整理している Makefile があります。make分析にはかなりの時間がかかります (1 日か 2 日) 。完了したら、電子メール通知を受け取りたいです。プロセスの最後に電子メールを自動的に送信して、プロセスが完了したときにアラートを受け取ることができるようにする良い方法はありますか?

私は現在、次のようなことをしています:

# Makefile
all: results1.dat results2.dat results3.dat
    python send_email_when_done.py

results1.dat: long_running_program1.py
    python $< > $@ # this takes ~12 hours

results2.dat: long_running_program1.py results1.dat
    python $^ > $@ # this takes ~2 hours 

results2.dat: long_running_program1.py results2.dat
    python $^ > $@ # this takes ~30 hours

プロセスが完了すると、send_email_when_done.pyスクリプトは電子メール通知を送信します。ただし、これは、プロセス全体がエラーなしで最初から最後まで実行された場合にのみ機能します。これを行うための良い方法について何か提案はありますか?

内でこれを達成できる提案に対して+1 Makefilemakeを使用して別のセッションで既に実行していsetsid make > make.out 2>&1ます。

4

4 に答える 4

2

単にメール送信を別のターゲットとして作成するのはどうですか:

report: long_running_program1.py
    python $< > $@ # this takes ~12 hours

sendmail:
    python send_email_when_done.py

そして、あなたはそれを次のように呼びます:

make report sendmail
or
make report ; make sendmail
于 2013-09-08T03:56:14.727 に答える
0

makeppを使用すると、基礎となるインタープリターにアクセスできるため、Perl プログラミングを少し実行して、makefile の任意の場所に END-Handler を追加できます。

perl { END { system "python send_email_when_done.py" }}

または、代替の件名のみの直接メールでよりきれいにレイアウトされています

perl {
  END {
    system "mail -s 'Build finished with rc=$?' me@my.home <&-";
  }
}

makeppには他にもたくさんあります。GNU make でできるほとんどすべてのことを行う以外に、もっと便利なことがたくさんあります。

于 2013-09-08T22:08:38.743 に答える