我最近让 Postfix 充当通过 Google Workspace(以前称为 Google G Suite)中继的仅发送 MTA。我现在想在完成 cron 作业后将电子邮件发送到我的个人电子邮件。我最初遇到的问题是,我的服务器发送了两封电子邮件,一封发送给,[email protected]
另一封发送给,[email protected]
后者退回了 MAILER-DAEMON 回复,因为该帐户不存在。
这是我最初的 cron 作业,位于/etc/cron.d/google-drive-backup
:
59 11 * * * root /root/scripts/google-drive-backup.sh && mail --append="From:Root <[email protected]>" --append="Reply-To:[email protected]" [email protected]
我在这些论坛上进行了研究,并发现使用以下方法可以抑制输出>/dev/null 2>&1
:如果我将其直接放在脚本后面,效果会很好:
59 11 * * * root /root/scripts/google-drive-backup.sh >/dev/null 2>&1
我可以确认没有发送电子邮件,因为邮件日志/var/log/mail.log
是空的。但是,当与以下命令结合使用时,抑制输出不会产生任何影响mail
:
59 11 * * * root /root/scripts/google-drive-backup.sh >/dev/null 2>&1 && mail --append="From:Root <[email protected]>" --append="Reply-To:[email protected]" [email protected]
或者
59 11 * * * root /root/scripts/google-drive-backup.sh && mail --append="From:Root <[email protected]>" --append="Reply-To:[email protected]" [email protected] >/dev/null 2>&1
本质上,我想禁用 crontab 的默认电子邮件功能并使用 sendmail,以便我可以自定义主题和电子邮件标题。
答案1
我最终将stdout
and隐藏stderr
到一个空文件中,然后使用两个 & 符号创建一个带有命令的主题,echo
该命令会通过管道传输到mail
命令中以完成其余部分。这是我完成的 cron 作业:
59 11 * * * root /root/scripts/google-drive-backup.sh >/dev/null 2>&1 && echo "Cron job has finished at $(date +'\%d/\%m/\%Y') $(date +'(\%H:\%M:\%S)')" | mail --subject="WordPress Backup Complete" --append="From:Root <[email protected]>" --append="Reply-To:[email protected]" [email protected]