我有这个脚本,每月运行一次,我想将输出发送到我的电子邮件。
如果我像这样手动运行它,那么标准输出将发送到我的电子邮件。
./monthly_mail.sh | mail -s "Mail purged" [email protected]
但是当我将以下行添加到我的 时crontab
,我只收到一封空白电子邮件。为什么脚本的 stdoutput 没有通过管道传输到mail
?
* * 2 * * /var/mail/monthly_mail.sh | /usr/bin/mail -s "Mail purged" [email protected]
答案1
有几件事值得尝试。
正确的
crontab
咒语如果您将其放入文件中,
/etc/crontab
则需要指定运行 cron 作业的用户。所以你的线路应该是这样的:* * 2 * * root /var/mail/monthly_mail.sh | /usr/bin/mail -s "Mail purged" [email protected]
该命令将在哪个
root
用户下运行。根据需要更改它。在 cron 之外测试邮件
确保您可以以您打算从文件运行 cron 的用户身份运行该命令
/etc/crontab
,首先从 shell 独立运行,然后再将其移至 crontab。$ /var/mail/monthly_mail.sh | /usr/bin/mail -s“邮件已清除”[电子邮件受保护]
检查输出
MAILTO
Cron 通常有一个默认用户,可以获取 STDOUT 或 STDERR 上生成的任何输出。查看是否有任何错误消息通过电子邮件发送给该用户,这些消息可能会提示您命令未运行的原因。该电子邮件地址通常在 cron 中配置,如下所示:
[email protected]
答案2
另一个网站建议2>&1
在之前添加|
,如下所示:
* * 2 * * root /var/mail/monthly_mail.sh 2>&1 | /usr/bin/mail -s "Mail purged" [email protected]