一、原因

自己在服务器上部署了两个定时任务,一个是acme.sh检查SSL证书的任务,一个是更新家里DDNS解析的任务。
但是最近发现家里宽带的公网IP已经变了,域名解析还是旧的IP。检查cron的日志也也没啥大问题,任务命令都被执行过了。

2021-08-08T00:05:01.596280+08:00 admin CRON[332623]: (tianliang) CMD (/home/tianliang/bin/aliddns.sh -m --record home --value $(curl -s icanhazip.com))
2021-08-08T00:05:01.597921+08:00 admin CRON[332624]: (tianliang) CMD ("/home/tianliang/.acme.sh"/acme.sh --cron --home "/home/tianliang/.acme.sh" > /dev/null)
2021-08-08T00:05:02.059703+08:00 admin CRON[332614]: (tianliang) MAIL (mailed 108 bytes of output but got status 0x004b#012)

因为没有配置过邮件发送设置,所以也没法从邮件中查找任务执行不成功的痕迹了。

二、配置邮件设置

这样没法呀,先把邮件给设置起来吧。

1. postfix -> msmtp

由于是自己个人的玩票服务器,搭建单独的邮件服务器不划算,所以选择使用便捷的外部邮箱,使用smtp来发送邮件。

zypper rm postfix
zypper in msmtp-mta

2. 设置smtp登录信息

选择建立全局的配置文件/etc/msmtprc

defaults
logfile /var/log/msmtp.log
syslog on
aliases /etc/aliases

account default
host smtp.exmail.qq.com
from admin@lintian.co
user admin@lintian.co
password xxxxxxxxxxxx
auth on
tls on
tls_certcheck off

测试smtp登录配置文件:msmtp -Sd

tianliang@admin:~> msmtp -Sd
loaded system configuration file /etc/msmtprc
ignoring user configuration file /home/tianliang/.msmtprc: 没有那个文件或目录
falling back to default account
using account default from /etc/msmtprc
host = smtp.exmail.qq.com
port = 25
source ip = (not set)
proxy host = (not set)
proxy port = 0
socket = (not set)
timeout = off
protocol = smtp
domain = localhost
auth = choose
user = admin@lintian.co
password = *
passwordeval = (not set)
ntlmdomain = (not set)
tls = on
tls_starttls = on
tls_trust_file = system
tls_crl_file = (not set)
tls_fingerprint = (not set)
tls_key_file = (not set)
tls_cert_file = (not set)
tls_certcheck = off
tls_min_dh_prime_bits = (not set)
tls_priorities = (not set)
tls_host_override = (not set)
<-- 220 smtp.qq.com Esmtp QQ Mail Server
--> EHLO localhost
<-- 250-smtp.qq.com
<-- 250-PIPELINING
<-- 250-SIZE 73400320
<-- 250-STARTTLS
<-- 250-AUTH LOGIN PLAIN
<-- 250-AUTH=LOGIN
<-- 250-MAILCOMPRESS
<-- 250 8BITMIME
--> STARTTLS
<-- 220 Ready to start TLS
--> EHLO localhost

三、等待cron任务执行邮件中

Emmmmm,邮件没等到,先来了错误。。

1. msmtp: the server sent an empty reply

/etc/msmtprc中添加tls_starttls off解决

2. smtpstatus=501 smtpmsg='501 mail from address must be same as authorization user

crontab中指定MAILFROM使mail from/etc/msmtprc一致

3. 解决上面两个错误,能收到邮件了,但是邮件只有标题,没有正文。。。。

Cron <tianliang@admin> aliddns.sh -m --record home --value $(curl -s icanhazip.com) 
发件人:(Cron Daemon) <admin@lintian.co>	
时   间:2021年8月8日(星期天) 晚上8:40
收件人:xutianliang <xutianliang@lintian.co>
大   小:1.5K

明明脚本有输出信息的啊。。。
折腾了三个小时完全没有头绪,换个方式来解决了。决定更改crontab命令行来实现邮件的发送.

5 * * * * aliddns.sh -m --record home --value $(curl -s icanhazip.com) | mail -Es "DDNS检查" xutianliang@lintian.co