有条件地发送cron工作邮件



我甚至不确定我想要的是否可能,但我想运行一个Cron作业,其中电子邮件仅在某些条件下发送。我知道可以通过在crontab文件中将MAILTO设置为空字符串来阻止邮件的发送,但是我用了几种不同的方法进行了搜索,没有找到任何关于有条件发送电子邮件的信息。我的最终目标是运行一个Cron作业,定期检查web服务器是否正在运行,如果没有,则重新启动它。如果web服务器必须重新启动,我只想要一封电子邮件。我正在用Perl编写我的Cron作业。在作业脚本中是否可以使用Perl命令在某些情况下禁用电子邮件?谢谢你给我的帮助。

如果您正在运行的命令生成输出,则Cronjobs将发送电子邮件。如果您编写的脚本只在需要电子邮件时将输出发送到STDERR/STDOUT,那么应该可以实现您的目标。

从cron作业中发送邮件有两种可能性:

  1. 从UNIX/Linux机制,可以发送邮件,如果一个程序,已经作为一个cron作业启动,写了一些东西到STDOUT或STDERR。

我不建议使用第二种可能性。它是僵化的。您不能根据发生的警报向不同的收件人发送邮件。使用第二种方法是一种很糟糕的设计。Cron作业应该将所有标准输出和标准错误重定向到每个Cron作业日志文件的单个标准输出和标准错误,以便进行可能的故障排除。

Perl拥有发送邮件的完美可能性,例如使用MIME::Lite模块。这个模块不是核心模块,所以如果它不可用,您可能应该请求sysadmin安装这个模块。如果你将使用第一种方式,那么你的问题很容易解决使用Perl逻辑:只需从你的Perl程序发送所需的邮件后,这个程序重新启动web服务器。