我如何让 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]
答案1
最后我使用了。它比或sSMTP
都简单得多,而且效果很好。Postfix
sendmail
为了将来参考,以下是如何将 sSMTP 与 Yahoo Mail 结合使用(不用担心,它比看起来简单得多):
使用包管理器下载 ssmtp。我使用了 Synaptic,但
sudo apt-get install ssmtp
应该也可以正常工作。打开配置文件
/etc/ssmtp/ssmtp.conf
。使配置看起来像这样:
[email protected] <--- Use your real email here mailhub=smtp.mail.yahoo.com:587 <--- This will depend on your email provider FromLineOverride=YES UseSTARTTLS=YES [email protected] <--- Use your real email here AuthPass=yourRealYahooPassword <--- Use your real email password here TLS_CA_File=~/cert.pem
使用 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
并添加以下行(用您的详细信息替换相应的部分):yourPCUsername:[email protected]:smtp.mail.yahoo.com:587
如果您以 root 身份运行,我认为您需要添加另一行将您的名字替换为“root”。
就这样,你就可以开始了!要进行测试,最简单的方法(在我看来)是创建一个包含以下内容的文件:
To: [email protected] <--- Use your real email here... From: "whateverYaWant" <[email protected]> <--- ...and here Subject: Some Notifying Email MIME-Version: 1.0 Content-Type: text/plain Body of your email goes here. Hello world!
检查你没有真正的发送邮件通过运行进行安装
sendmail -V
。它应该显示“sSMTP”。最后,运行
cat fileWithEmailInIt.txt | sendmail -i -t
,然后等待几秒钟(10-30)并检查您的电子邮件!
补充说明1:如果您在使用 Gmail 时遇到问题,请尝试以下选项 1这个答案。
(谢谢本·克瑞西!
补充说明2:如果邮件是从命令行发送的,而不是通过 crontab 发送的,请尝试更改FromLineOverride
为。您还可以通过添加到 来获取更详细的日志记录NO
-额外的日志记录将发送到。 (感谢/etc/ssmtp/ssmtp.conf
Debug=YES
ssmtp.conf
/var/log/mail.log
雅库布·库库尔!
答案2
安装 Postfix。它比大多数其他软件包更复杂,但仍然不是复杂的。
sudo apt-get install postfix
选择“Internet 站点”,然后接受所有默认设置。然后我们只需停止外部连接,将其变成“空客户端“。运行:sudoedit /etc/postfix/main.cf
并找到inet_interfaces
设置(靠近末尾)并将其更改为loopback-only
,如下所示:
inet_interfaces = loopback-only
最后重新启动 Postfix sudo /etc/init.d/postfix restart
(重新加载不行)。
您现在已经安装了 Postfix,它不会为外部机器中继电子邮件,它只接受 127.0.0.1(以及 IPv6 的 ::1)上的连接。
另外,您的 cron 行可能无法正常工作,因为您使用的是非相对路径和带有 Bash 替换的路径。sh
无法理解~
,并且可能没有正确的PATH
设置。因此,将它们替换为(我只是猜测实际路径):
1 0 * * * /home/clonkex/Desktop/toskymesh.sh
59 6 * * * /home/clonkex/Desktop/tooptus.sh
0 3 * * * /usr/bin/snapraid sync
如果您的脚本需要从特定目录运行,请确保它们cd
位于正确的目录中。不要假设它cron
会在正确的位置,因为它很可能不会。
答案3
我对 exim4 的运气非常好。
sudo apt-get install alpine exim4 mailutils eximon4 spf-tools-perl swaks
(Alpine 是我喜欢使用的邮件客户端)
之后我就跑了
sudo dpkg-reconfigure exim4-config
并按照提示操作。此页面:https://help.ubuntu.com/community/Exim4也非常有帮助。我花了大约 10 分钟才让它运行起来。
答案4
来自 sSMTP 手册页:“它不执行别名,而别名必须在用户代理或邮件中心上执行。它也不遵守 .forwards,而这必须在接收主机上执行。它尤其不会传递到管道。”
因此,如果您想在外部电子邮件上接收发送给根的所有消息,使用 sSMTP 不是一个好主意,因为它不支持别名。
相反,您可以使用 postfix。它仍然非常简单。以下是如何将它与 gmail 一起使用作为发送邮件的 smtp:
sudo apt-get install postfix mailutils
常规邮件配置类型:卫星系统
系统邮件名称:邮件服务器的首选完全限定名称,例如,mail.example.com
SMTP 中继主机(空白表示无):[smtp.gmail.com]:587
添加到/etc/postfix/main.cf:
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
创建 /etc/postfix/sasl/sasl_passwd
[smtp.gmail.com]:587 [email protected]:password
然后:
sudo postmap /etc/postfix/sasl/sasl_passwd
sudo chown -R root:postfix /etc/postfix/sasl
sudo chmod 750 /etc/postfix/sasl
sudo chmod 640 /etc/postfix/sasl/sasl_passwd*
编辑 /etc/aliases 并添加:
root: [email protected]
最后,运行:
sudo newaliases
sudo systemctl stop postfix.service
sudo systemctl start postfix.service
现在,您可以测试重定向是否有效:
echo "Test to root." | mail -s "Test message to root" root
希望能帮助到你。