我通过将可执行文件放在/etc/cron.{daily,hourly,monthly,weekly}
. 有很多以 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
我想在以下情况下从我的脚本中获取电子邮件:
- 脚本失败并给出非零的退出代码。
- 剧本有话要告诉我
我安装了SSMTP并且工作正常,我从我的 Google 帐户发送邮件。SSMTP 只能使用一个帐户发送邮件这一事实对我来说不是问题。它只是一个家庭服务器,我拥有的用户没有添加 cron-jobs 的能力。
我想知道来自脚本的邮件通常如何在 Linux/Unix 中工作,特别是在 Ubuntu 中。我也想知道我在上述两种情况下获取邮件的好方法。
默认情况下,cron 将向运行 crontab 的帐户的所有者发送电子邮件。
系统范围的 crontab 位于 /etc/crontab 中,在用户 `root' 下运行
因为 root 被广泛使用,我还是建议在 /etc/aliases 文件中添加一个 root 别名。(之后运行'newaliases')
构造它的正常方法是将root 别名为系统上的另一个用户,例如,对我而言,我将别名'root' 别名为'phil'(我的用户帐户),别名'phil' 别名为我的外部电子邮件地址。
如果您有一个特定的用户 cron,您希望在输出时通过电子邮件将其发送给您,您可以再次使用 /etc/aliases(假设您具有超级用户访问权限)将用户重定向到另一个电子邮件地址,或者您可以在你的 crontab 顶部:
如果应该将邮件发送给本地用户,您可以只输入用户名:
如果您需要更多信息,请运行以下命令查看 crontab(5):
为了获得从 vixie cron 发送的电子邮件,您需要一些可以复制 sendmail 命令的东西。所以安装 postfix 或 SSMTP 会解决这部分问题。如果您使用后缀,则别名文件可用于将系统用户映射到真实电子邮件地址。
将 MAILTO="[email protected]" 添加到 crontab 顶部将导致 cron 作业的任何输出通过电子邮件发送。这与错误代码无关。
对于将错误正确输出到 STDERR 的脚本,只有在出错时才容易收到电子邮件,只需执行以下操作:
这只会将 STDOUT 重定向到 null。如果存在任何 STDERR 消息,他们将收到电子邮件给您。
但是,我发现一些脚本会错误地将错误输出为 STDOUT 并将退出代码设置为 1。我还没有想办法从这些脚本中获取输出,但如果退出代码为 0,则忽略输出。唯一的方法我能想到的就是将输出重定向到一个文件,然后如果退出码不是0输出那个文件让cron去抓取。虽然看起来很可怕。
如果要将所有输出(stdout 和 stderr)发送到特定地址,则可以使用该
MAILTO
变量。例如,将以下内容放在脚本的顶部。尝试将“root:[email protected]”添加到 /etc/aliases
这会将该用户的所有消息发送到您的电子邮件。如果您不想要所有消息,则可以专门为此创建一个用户。
只要脚本输出一些东西,你就会收到一封邮件。
在我所有通常每天运行大约 20 个 cronjobs 的生产服务器上,我对 python-cronwrap 包发誓。在这里查看:http: //pypi.python.org/pypi/cronwrap。它真的很容易配置,最重要的是可靠。
我认为 SSMTP 不能满足您的需要。您需要可以从 cron 进程“接收”邮件,然后将其发送到您的真实邮箱的东西。
我使用 Sendmail,但那是因为我是 Sun 的老手;我知道现在所有使用 Postfix 的酷孩子都会嘲笑它。您的 ubuntu 社区可以指导您设置邮件系统。
另一种选择 - 我将所有根邮件归档到一些文件中,然后删除原始邮件。
我 cron 一个脚本(这是关键部分)-
这使事情保持整洁,我可以密切关注它。我可以通过电子邮件将每日邮件文件发送到外部电子邮件 ID 等...