Cron 不發送電子郵件,命令行電子郵件有效
我在執行 Raspbian 10 Buster 的樹莓派上安裝了 ssmtp。來自命令行的電子郵件,例如使用
MAILTO
變數添加到文件來配置使用者的 cron 作業以發送電子郵件。# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any'). # # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). MAILTO="person1@myredacteddomain.tld,person2@myredacteddomain.tld" # we need to set the user path to add the system scripts directory /usr/local/sbin # I tried with PATH=$PATH:/usr/local/sbin but it used this verbatim in the path PATH=/usr/sbin:/usr/bin:/bin:/usr/local/sbin: # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 26 3 * * * cronic python3 ~/redacted_directory_name/redacted_script_name.py 24 22 * * * echo "Testing cron email"
正如我從其他線上搜尋中了解到的(如果我錯了,請糾正我),cron 預設使用 sendmail 來發送電子郵件。
系統上可以使用sendmail,但實際上是ssmtp
$ which sendmail /usr/sbin/sendmail $ ls -l /usr/sbin/sendmail lrwxrwxrwx 1 root root 5 Jul 20 2014 /usr/sbin/sendmail -> ssmtp
在這台機器上,我已將 ssmtp 配置為使用外部 SMTP 伺服器發送郵件。
cron 不會為 root 或其他非 sudo 使用者發送電子郵件。
在郵件日誌中,我看到以下內容
$ tail /var/log/mail.log Jan 17 16:43:02 ed-mh-pi01 sSMTP[25679]: Cannot open mailhub:25 Jan 18 03:22:24 ed-mh-pi01 sSMTP[9846]: Creating SSL connection to host Jan 18 03:22:25 ed-mh-pi01 sSMTP[9846]: SSL connection using ECDHE_RSA_AES_256_GCM_SHA384 Jan 18 03:22:26 ed-mh-pi01 sSMTP[9846]: Sent mail for root@redactedhostname@myredacteddomain.tld (221 2.0.0 Bye) uid=0 username=root outbytes=638 Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: /etc/ssmtp/ssmtp.conf not found Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: Unable to locate mailhub Jan 18 22:20:02 ed-mh-pi01 sSMTP[6924]: Cannot open mailhub:25 Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: /etc/ssmtp/ssmtp.conf not found Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: Unable to locate mailhub Jan 18 22:24:01 ed-mh-pi01 sSMTP[6988]: Cannot open mailhub:25
Jan 18 22:20:02 和 Jan 18 22:24:02 的條目似乎與 cron 作業電子郵件有關。我在這些時候做了幾個測試。
它指出,發送電子郵件的任何程序都無權訪問
/etc/ssmtp/ssmtp.conf
. 在Arch linux wiki上它指出/usr/bin/ssmtp 二進製文件作為郵件組執行並且可以讀取該文件。沒有理由將您自己或其他使用者添加到郵件組。
我不知道這是否適用於 raspbian,但這讓我認為這可能是問題所在。我嘗試將組所有權
/etc/ssmtp/
及其內容更改為郵件,如下所示:$ ls -l /etc/ssmtp/ total 8 -rw-r--r-- 1 root mail 200 Jul 20 2014 revaliases -rw-r----- 1 root mail 764 Jan 17 12:03 ssmtp.conf
但是,問題仍然存在
[root] ~ $ tail /var/log/mail.log <snip> Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: /etc/ssmtp/ssmtp.conf not found Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: Unable to locate mailhub Jan 18 22:39:01 ed-mh-pi01 sSMTP[7559]: Cannot open mailhub:25
那麼,為什麼 cron 不發送電子郵件,我該如何解決呢?
編輯
如果我(臨時)更改權限
/etc/ssmtp/ssmtp.conf
以允許任何使用者閱讀,則會發送電子郵件。這不是一個解決方案,因為該文件包含電子郵件帳戶的純文字密碼,也沒有解釋為什麼普通使用者可以從命令行發送,而 cron 不能。編輯 2
$ ls -l /usr/sbin/ssmtp -rwxr-xr-x 1 root root 30588 Jul 20 2014 /usr/sbin/ssmtp
你已經寫了,
/usr/bin/ssmtp 二進製文件作為郵件組執行並且可以讀取此文件
但是您已經證明您的二進製文件並非如此:
-rwxr-xr-x 1 根 30588 2014 年 7 月 20 日 /usr/sbin/ssmtp
維基說的是,
因為您的電子郵件密碼以明文形式儲存在 /etc/ssmtp/ssmtp.conf 中,所以此文件的安全性很重要。預設情況下,整個 /etc/ssmtp 目錄只能由 root 和郵件組訪問。/usr/bin/ssmtp 二進製文件作為郵件組執行並且可以讀取該文件。沒有理由將您自己或其他使用者添加到郵件組。
因此,您需要更正損壞的權限:
chown -R root:mail /etc/ssmtp /usr/sbin/ssmtp chmod -R g=u,g-w,o= /etc/ssmtp chmod a=rx,g+s /usr/sbin/ssmtp
但是我還應該指出,Arch wiki 說的第一件事是,
sSMTP 未維護。考慮改用 msmtp 或 OpenSMTPD 之類的東西