CentOS系统域名到期提醒设置方法
在CentOS系统中,需先安装whois工具(用于查询域名到期时间),若未安装可通过以下命令完成:
yum install -y whois
whois命令(最常用)通过whois查询域名的Expiry Date(到期日期),示例:
whois example.com | grep 'Expiry Date'
输出结果类似:Expiry Date: 2025-12-31T23:59:59Z(UTC时间),需转换为本地时间以便判断。
若域名配置了SSL证书,可通过以下命令获取证书有效期:
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate
输出结果示例:notAfter=Dec 31 23:59:59 2025 GMT,需提取日期并计算剩余天数。
创建脚本/home/domain/domain_expiry_check.sh,内容如下:
#!/bin/bash
# 配置管理员邮箱
MAIL_USER="admin@example.com"
# 定义需检测的域名列表
DOMAINS=("example.com" "example.cn" "test.com")
for DOMAIN in "${DOMAINS[@]}"; do
# 查询域名到期时间(优先whois,无结果则尝试证书)
EXPIRY_DATE=$(whois $DOMAIN | grep -i 'Expiry Date' | awk '{print $4}' | cut -d'T' -f1 2>/dev/null)
if [ -z "$EXPIRY_DATE" ]; then
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
fi
# 转换为时间戳
CURRENT_TS=$(date +%s)
EXPIRY_TS=$(date -d "$EXPIRY_DATE" +%s)
DAYS_LEFT=$(( (EXPIRY_TS - CURRENT_TS) / 86400 ))
# 判断剩余天数并发送提醒(剩余7天内)
if [ $DAYS_LEFT -le 7 ] && [ $DAYS_LEFT -ge 0 ]; then
echo "域名 $DOMAIN 将在 $DAYS_LEFT 天后过期(到期时间:$EXPIRY_DATE)" | mail -s "域名到期提醒" $MAIL_USER
elif [ $DAYS_LEFT -lt 0 ]; then
echo "域名 $DOMAIN 已过期(到期时间:$EXPIRY_DATE)" | mail -s "域名过期警报" $MAIL_USER
fi
done
赋予权限:
chmod +x /home/domain/domain_expiry_check.sh
若需更及时的通知,可配置钉钉机器人提醒。步骤如下:
① 在钉钉群创建自定义机器人,获取Webhook地址;
② 创建脚本/home/domain/dingding_reminder.sh,内容如下:
#!/bin/bash
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=YOUR_ACCESS_TOKEN"
DOMAINS=("example.com" "example.cn")
for DOMAIN in "${DOMAINS[@]}"; do
EXPIRY_DATE=$(whois $DOMAIN | grep -i 'Expiry Date' | awk '{print $4}' | cut -d'T' -f1 2>/dev/null)
if [ -z "$EXPIRY_DATE" ]; then
continue
fi
CURRENT_TS=$(date +%s)
EXPIRY_TS=$(date -d "$EXPIRY_DATE" +%s)
DAYS_LEFT=$(( (EXPIRY_TS - CURRENT_TS) / 86400 ))
if [ $DAYS_LEFT -le 7 ] && [ $DAYS_LEFT -ge 0 ]; then
DATA=$(cat <<EOF
{
"msgtype": "text",
"text": {
"content": "域名 $DOMAIN 将在 $DAYS_LEFT 天后过期(到期时间:$EXPIRY_DATE)"
}
}
EOF
)
curl -X POST "$WEBHOOK" -H 'Content-Type: application/json' -d "$DATA"
fi
done
赋予权限:
chmod +x /home/domain/dingding_reminder.sh
通过crontab设置定期执行脚本,例如每天凌晨2点检查:
crontab -e
添加以下内容(根据脚本路径调整):
0 2 * * * /home/domain/domain_expiry_check.sh >/dev/null 2>&1
# 或钉钉提醒(每3天检查一次)
0 2 */3 * * /home/domain/dingding_reminder.sh >/dev/null 2>&1
DOMAINS数组,确保包含所有需监控的域名;