一、原因
自己在服务器上部署了两个定时任务,一个是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