将 crontab 输出重定向到电子邮件

Fri*_*ida 3 email linux cron

看起来很简单,但是如何将这种 crontab 的输出重定向到我的电子邮件?

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1
Run Code Online (Sandbox Code Playgroud)

我尝试添加 MAILTO=myemail@email.com 但没有任何结果。

问候

Jam*_*man 5

您在那里拥有的 cron 条目将STDOUT和都重定向STDERR到一个文件:/var/log/CRONLOGS/testing_prod.log.

做你想做的最简单的方法mailx是在 cron 作业结束时运行,使用间接发送该文件:

00 06 * * * /usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /var/log/CRONLOGS/testing_prod.log 2>&1; mailx -s "Cron output" me@example.org < /var/log/CRONLOGS/testing_prod.log
Run Code Online (Sandbox Code Playgroud)

但是:请注意,您的 cron 作业正在附加到日志文件中,因此除非定期清除旧条目(或轮换),否则您将收到所有以前的输出以及新输出。最好创建一个小的 shell 脚本来写入临时日志,将其邮寄,然后将其附加到邮件日志中:

#!/bin/sh
/usr/bin/php /home/user/myapp/testing.sh -e prod 1>> /tmp/testing_prod$$.log 2>&1
mailx -s "Cron output" me@example.org < /tmp/testing_prod$$.log
cat /tmp/testing_prod$$.log >> /var/log/CRONLOGS/testing_prod.log
rm /tmp/testing_prod$$.log
Run Code Online (Sandbox Code Playgroud)

这样做的好处是使crontab外观更整洁:

00 06 * * * /home/user/myapp/cronscript.sh
Run Code Online (Sandbox Code Playgroud)