Bash 在“make”完成后发送电子邮件,即使失败
我有一个Makefile,它组织了必须按特定顺序运行的几个分析步骤。分析需要相当长的时间(一两天),我希望在Bash 在“make”完成后发送电子邮件,即使失败,bash,makefile,Bash,Makefile,我有一个Makefile,它组织了必须按特定顺序运行的几个分析步骤。分析需要相当长的时间(一两天),我希望在make完成时收到一些电子邮件通知。是否有一种好方法可以让make在流程结束时自动发送电子邮件,以便在流程完成时收到提醒,尤其是其中一个步骤出现故障时 我目前正在做这样的事情: # Makefile all: results1.dat results2.dat results3.dat python send_email_when_done.py results1.dat: lo
make
完成时收到一些电子邮件通知。是否有一种好方法可以让make在流程结束时自动发送电子邮件,以便在流程完成时收到提醒,尤其是其中一个步骤出现故障时
我目前正在做这样的事情:
# 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
#生成文件
全部:结果1.dat结果2.dat结果3.dat
python在完成时发送电子邮件
结果1.dat:long_running_program 1.py
python$<>$@#这需要约12个小时
结果2.dat:长时间运行的程序1.py结果1.dat
python$^>$@#这需要约2个小时
结果2.dat:长时间运行的程序1.py结果2.dat
python$^>$@#这需要约30个小时
其中,send\u email\u when\u done.py
脚本在流程完成时发送电子邮件通知。但这只有在整个过程从头到尾都没有出现任何错误的情况下才有效。有什么好的建议吗
+1获取可在
Makefile
中完成此操作的建议。我已经在一个单独的会话中运行了make
,使用setsid make>make.out 2>&1
将电子邮件作为单独的目标发送怎么样:
report: long_running_program1.py
python $< > $@ # this takes ~12 hours
sendmail:
python send_email_when_done.py
让我把它做得更一般一些,这样它就可以为100个其他类似的
make
发送电子邮件。使用alias并将其添加到bashrc
中,下面是我如何尝试使用alias
命令makes
(make
和s
结束报告)。另外一个好处是,不管您是否担心规则和依赖性,您都可以打印所有的详细的。您可以将其用于所有构建,而无需真正更改makefile
注意:我使用了mailx,您可以在您的机器上阅读设置mailx,因为它允许您访问底层解释器,所以您可以执行一些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 <&-";
}
}
perl{
结束{
系统“mail-s”的构建已完成,rc=$?”me@my.home一种方法是指示make忽略长时间运行程序中的错误。这可以通过运行make-i
或通过在每个命令前面加上破折号来忽略失败,然后只运行普通的make
:
# 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
#生成文件
全部:结果1.dat结果2.dat结果3.dat
python在完成时发送电子邮件
结果1.dat:long_running_program 1.py
-python$<>$@#这需要约12个小时
结果2.dat:长时间运行的程序1.py结果1.dat
-python$^>$@#这需要约2个小时
结果2.dat:长时间运行的程序1.py结果2.dat
-python$^>$@#这需要约30个小时
有关忽略错误的详细信息,请参阅。这里可能有一个想法:
# 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