如何让crontab使用s-nail发送电子邮件?

如何让crontab使用s-nail发送电子邮件?

我正在设置一台新的 Linux 计算机。我安装了 s-nail(sudo apt install s-nail)以便从命令行(和我的脚本)向 Internet 上的任何电子邮件地址发送电子邮件。在使用我的 gmail SMTP 服务器凭据将必要的行添加到 /etc/s-nail.rc 后,一切现在都正常运行。

这台计算机上没有安装其他软件包(mail、mailx、sendmail、postfix、ssmtp 等均不存在)。

但是现在,当 cron 任务失败时,我无法让 crontab 给我发送电子邮件(发送到我的 gmail 地址)。我不太明白事情究竟是如何运作的,但我猜 s-nail 不需要本地 MTA,而 cron 需要本地 MTA?

有没有办法让 cron 给我发电子邮件,而无需安装任何其他软件包?我可以创建指向 mail、mailx 和 sendmail(全部指向 s-nail)的符号链接来“欺骗” crontab 吗?

谢谢。

答案1

1. 让 crons-nail成为mail

cron 有一个内部机制,用于将作业输出发送给电子邮件收件人。该机制需要一个具有以下接口的外部程序sendmail()或者在 Ubuntu 上,显然还有一个界面mailsendmail)。 可能,cron 会选择和中的第一个mail,就像其他程序一样()。

什么是不是工作是符号链接sendmails-nail。问题是,s-nail不兼容。cron会抱怨无法识别的自定义标题选项-S、缺少邮件正文或类似问题。相反,作者网页说:

它旨在提供 POSIX mailx(1) 命令的功能

但是的界面mailx与 类似mail!事实上,解决方法似乎是这样的:

/usr/bin/mail您可以创建一个从到 的符号链接/usr/bin/s-nail。[…]确保/usr/sbin/sendmail未安装,因为它[将]首先尝试使用sendmail[来源]

这些说明是关于如何让 unattended-upgrades 脚本用于s-nail发送电子邮件的,但 cron 的行为方式相同,所以请尝试一下。(我自己还没有尝试过。)

2. 或者s-nail在单独的 cronjob 中使用

如果上述解决方案 1 不起作用,并且您真的想要使用,您可以将输出的邮件发送集成到要执行的s-nail每个命令中。条目可能如下所示:croncrontab

# every minute, execute your_command and send sterr by e-mail (but not stdout)
* * * * * { ./your_command > /dev/null ; } 2>&1  | s-nail -s 'A subject' [email protected]

灵感:与mail)。

3. 或者使用msmtpssmtp代替sendmail

如果您还不打算使用s-nail,那么这个替代方案是一个相当优雅和简单的解决方案。为此,您可以让 cron 依赖界面sendmail来发送邮件,并安装一个sendmail集成了大部分便利功能的现代替代方案s-nail(例如直接通过外部 SMTP 服务器发送,而无需本地邮件服务器)。

ssmtpmsmtp都是此类程序。请参阅在 Ask Ubuntu 上有关使用 cron 的详细说明ssmtp。安装时ssmtp,它将已安装一个符号链接sendmail到其二进制文件。

但显然,ssmtp现在已不再维护,并且msmtp是其拟议的继任者(迁移指南)。

相关内容