当前位置: 首页>>技术教程>>正文


linux – 如何在Ubuntu中从(失败的)cron-jobs获取e-mail?

, , , ,

问题描述

我通过将可执行文件放入/etc/cron.{daily,hourly,monthly,weekly}之一中在Ubuntu中创建cron-jobs。有很多以cron开头的目录:

kent@rat:~$ ls -ld /etc/cron*
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.d
drwxr-xr-x 2 root root 4096 2009-07-16 13:17 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.monthly
-rw-r--r-- 1 root root  724 2009-05-16 23:49 /etc/crontab
drwxr-xr-x 2 root root 4096 2009-06-06 18:52 /etc/cron.weekly

在以下情况下,我想从脚本中获取e-mail:

  1. 脚本失败并给出非零的退出代码。

  2. 剧本有话要告诉我

我已经安装了SSMTP并且可以正常工作,我从Google-account发送邮件。 SSMTP只能使用一个帐户发送邮件这一事实对我来说不是一个问题。这只是一台家庭服务器,我没有用户可以添加cron-jobs。

我想知道通常情况下,从脚本发送邮件通常在Linux /Unix和Ubuntu中是如何工作的。我还想知道一种在上述两种情况下获取邮件的好方法。

最佳方法

默认情况下,cron将通过电子邮件向其运行crontab的帐户的所有者发送电子邮件。

system-wide crontab在/etc /crontab中,在用户“ root”下运行

因为root被广泛使用,所以我建议还是将根别名添加到/etc /aliases文件中。 (在之后运行’newaliases’)

构造此文件的正常方法是将root别名给系统上的另一个用户,例如对我来说,我会将’root’别名为’phil'(我的用户帐户),并将别名’phil’别名为我的外部电子邮件地址。

如果您希望在输出时通过电子邮件发送给特定的用户cron,则可以再次使用/etc /aliases(假设您具有超级用户访问权限)将用户重定向到另一个电子邮件地址,或者可以在crontab的顶部:

MAILTO="email@domain.com"

如果邮件应发送给本地用户,则可以只输入用户名:

MAILTO=someuser

如果需要更多信息,请通过运行以下命令查看crontab(5):

man 5 crontab

次佳方法

为了获得从vixie cron发送的电子邮件,您将需要复制sendmail命令的内容。因此,安装postfix或SSMTP可以解决此问题。如果您使用的是后缀,则别名文件可用于将系统用户映射到真实的电子邮件地址。

将MAILTO = “foo@bar.com”添加到crontab的顶部将导致通过电子邮件发送cron作业的任何输出。这与错误代码无关。

对于将错误正确输出到STDERR的脚本,然后仅在错误时将其容易通过电子邮件发送,只需执行以下操作:

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null

这将仅将STDOUT重定向为null。如果有任何STDERR消息,他们将收到一封电子邮件。

但是,我发现有些脚本将错误地将错误输出为STDOUT并将退出代码设置为1。我还没有找到从这些脚本中获取输出的方法,但是如果退出代码为0,则忽略输出。唯一的方法我可以想到的是将输出重定向到文件,然后,如果退出代码不为0,则输出该文件以供cron抓取。虽然看起来很恐怖。

第三种方法

如果要将所有输出(stdout和stderr)发送到特定地址,则可以使用MAILTO变量。例如,将以下内容放在脚本顶部。

MAILTO="address@example.com"

第四种方法

尝试将“ root:your@email.address”添加到/etc /aliases

会将有关该用户的所有消息发送到您的电子邮件中。如果您不希望收到所有消息,则可以为此专门创建一个用户。

只要脚本输出某些内容,您就会收到一封邮件。

第五种方法

在我通常每天大约运行20个cronjob的所有生产服务器上,我发誓要使用python-cronwrap软件包。在此处检查:http://pypi.python.org/pypi/cronwrap。它真的很容易配置,而且最重要的是可靠。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9269.html,未经允许,请勿转载。