我怎样才能让 crontab 把它的工作输出通过电子邮件发送给我?我有[email protected]
上面的工作,但它不起作用。
我知道我需要使用诸如 Postfix 或 Sendmail 之类的东西,但对于我来说,我无法找到如何实现这一点。我搜索并搜索了有关设置 Postfix 的简单指南,但它们都非常复杂,并且希望您设置整个服务器来发送和接收电子邮件并了解所有术语(例如,什么是域名外发电子邮件?)。
我只想让 crontab 给我发电子邮件。为什么这么难??
附加信息:
我的 crontab 文件如下所示:
[email protected]
1 0 * * * ~/Desktop/toskymesh.sh
59 6 * * * ~/Desktop/tooptus.sh
0 3 * * * snapraid sync
更多附加信息:
的输出ps -ef | grep '[s]endmail'
root 6840 1370 0 10:26 ? 00:00:00 sendmail: MTA: accepting connections
我确定 cron 正在工作,但我正在测试邮件命令echo Test | mail -s Test [email protected]
。
最后我用了
sSMTP
。它比 eitherPostfix
或 or简单得多sendmail
,而且工作做得很好。为了将来参考,以下是如何将 sSMTP 与 Yahoo Mail 一起使用(别担心,它比看起来要简单得多):
使用您的包管理器下载 ssmtp。我使用了 Synaptic,但
sudo apt-get install ssmtp
应该也能正常工作。打开配置文件在
/etc/ssmtp/ssmtp.conf
.使配置看起来像这样:
使用 OpenSSL 创建 cert.pem 文件。我使用
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999 -nodes
了(更多信息,请参见如何使用 OpenSSL 创建自签名证书)。你可以把文件贴在任何地方,但我只是把它放在 ~/. 无论你把它放在哪里,确保你将TLS_CA_File=
ssmtp.conf 中的行指向正确的位置。打开文件
/etc/ssmtp/revaliases
并添加行(用您的详细信息替换相应的部分):如果您以 root 身份运行,我假设您需要添加另一行,用“root”替换您的名字。
就是这样,你很高兴去!要进行测试,最简单的方法 (IMO) 是创建一个包含以下内容的文件:
通过运行检查您是否没有安装真正的sendmail
sendmail -V
。它应该说“sSMTP”。最后,运行
cat fileWithEmailInIt.txt | sendmail -i -t
,然后等待几秒钟 (10-30) 并检查您的电子邮件!附加说明 1:如果您在使用 Gmail 时遇到问题,请尝试此答案的选项 1 。
(感谢Ben Creasy!)
附加说明 2:如果邮件是从命令行而不是通过 crontab 发送的,请尝试更改
FromLineOverride
为NO
in/etc/ssmtp/ssmtp.conf
。您还可以通过添加Debug=YES
到ssmtp.conf
- 额外的日志记录到 来获得更详细的日志记录/var/log/mail.log
。(感谢Jakub Kukul!)
安装后缀。它比大多数其他包更复杂,但仍然不复杂。
选择“Internet 站点”,然后接受所有默认值。然后我们只需要停止外部连接,把它变成一个“空客户端”。运行:
sudoedit /etc/postfix/main.cf
并找到inet_interfaces
设置(接近尾声)并将其更改为loopback-only
,如下所示:最后重新启动 Postfix
sudo /etc/init.d/postfix restart
(重新加载不会)。您现在安装了一个 Postfix,它不会为外部机器中继电子邮件,它只会接受 127.0.0.1(对于 IPv6 为 ::1)的连接。
另外,您的 cron 行可能无法正常工作,因为您使用的是非相对路径和包含 Bash 替换的路径。
sh
不理解~
并且它可能没有正确的PATH
设置。所以将它们替换为(我只是在猜测实际路径):如果您的脚本需要从特定目录运行,请确保它们
cd
位于正确的目录中。不要假设它cron
会在正确的位置,因为它可能不会。我在 exim4 上运气很好。
(alpine 只是我喜欢使用的邮件客户端)
在那之后,我跑了
并按照提示进行操作。此页面:https ://help.ubuntu.com/community/Exim4也非常有帮助。我花了大约 10 分钟才让它运行起来。
如果您不想要电子邮件通知,但想在某处记录 cron 作业的输出以便在需要时能够检查它:
当询问邮件服务器配置类型时,选择“仅限本地”。
确认
cron
就能发送邮件:或者添加一个
cron
工作:等待它运行(
journalctl -ef
或watch date
),然后cat /var/mail/root
。来自 sSMTP 联机帮助页:“它不执行别名,这必须在用户代理或邮件中心上完成。它也不尊重 .forwards,这必须在接收主机上完成。它尤其不会传送到管道。 “
所以,如果你想在你的外部电子邮件中接收所有发送到 root 的消息,使用 sSMTP 是个坏主意,因为它不支持别名。
相反,您可以使用 postfix。还是很简单的。以下是如何将它与 gmail 一起用作发送邮件的 smtp:
一般邮件配置类型:卫星系统
系统邮件名称:邮件服务器的首选完全限定名称,例如mail.example.com
SMTP 中继主机(空白表示无):[smtp.gmail.com]:587
添加到/etc/postfix/main.cf:
创建 /etc/postfix/sasl/sasl_passwd
然后:
编辑 /etc/aliases 并添加:
最后,运行:
现在,您可以测试重定向是否有效:
希望能帮助到你。
我使用了一种非常简单的方法来
cron
发送电子邮件:将Linux 配置、脚本和文档备份到 Gmail。自动发送电子邮件的最简单方法
从使用 ssmtp 发送电子邮件警报中,我们找到了从终端或脚本自动发送电子邮件的最简单方法。安装步骤很简单:
有一个步骤没有提到;Google 将向您发送一封电子邮件,确认您希望允许“安全性较低”的应用程序使用您的帐户发送邮件:
有收到太多邮件的烦恼。例如,每次您输入错误的
sudo
密码时,您都会收到一封电子邮件:Stop email me bad sudo password attempts