温馨提示×

centos域名到期提醒

小樊
42
2025-10-25 21:16:22
栏目: 云计算

CentOS系统域名到期提醒设置方法

一、基础准备:安装必要工具

在CentOS系统中,需先安装whois工具(用于查询域名到期时间),若未安装可通过以下命令完成:

yum install -y whois

二、域名到期时间查询方法

1. 使用whois命令(最常用)

通过whois查询域名的Expiry Date(到期日期),示例:

whois example.com | grep 'Expiry Date'

输出结果类似:Expiry Date: 2025-12-31T23:59:59Z(UTC时间),需转换为本地时间以便判断。

2. 使用OpenSSL查看SSL证书到期时间(针对HTTPS域名)

若域名配置了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,需提取日期并计算剩余天数。

三、自动提醒脚本配置

1. Shell脚本+邮件提醒(基础版)

创建脚本/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

2. 钉钉机器人提醒(进阶版)

若需更及时的通知,可配置钉钉机器人提醒。步骤如下:
① 在钉钉群创建自定义机器人,获取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

注意事项

  1. 域名列表维护:定期更新脚本中的DOMAINS数组,确保包含所有需监控的域名;
  2. 邮件服务配置:若使用邮件提醒,需确保CentOS系统已安装并配置Postfix/Sendmail等邮件服务;
  3. 权限问题:脚本需使用具有执行权限的用户运行,避免权限不足导致查询失败;
  4. 测试验证:配置完成后,可手动运行脚本测试提醒功能是否正常。

0