本文目录导读:

域名到期自动检测脚本实战指南,运维人员必备!
目录导读
- 为什么需要域名到期自动检测?
- 主流域名到期检测脚本原理
- 三款实用脚本详解(附代码)
- 脚本部署与自动化告警配置
- 常见问题问答(FAQ)
- 从被动救火到主动预防
为什么需要域名到期自动检测?
对于企业或个人站长,域名到期未续费可能导致:
- 网站突然无法访问,业务中断
- 域名被恶意抢注,损失品牌资产
- 搜索引擎降权,原有SEO排名丢失
传统做法是手动记录域名到期日期,但管理多个域名时极易遗漏。实用脚本能自动检测域名是否到期,并通过邮件、微信、短信等方式提前告警,将“被动救火”转变为“主动预防”。
主流域名到期检测脚本原理
所有检测脚本都基于以下核心逻辑:
- 查询WHOIS信息:通过系统命令(如
whois)或第三方API获取域名注册日期、到期日期。 - 解析时间字符串:将WHOIS返回的日期(如“2025-08-15T04:00:00Z”)转换为统一格式。
- 计算剩余天数:用到期日期减去当前时间,若小于阈值(如30天)则触发告警。
关键注意点:WHOIS查询频繁可能被限制,建议每个域名每天查询不超过5次,或使用缓存结果。
三款实用脚本详解(附代码)
脚本1:Python版(适合通用服务器)
#!/usr/bin/env python3
import whois
import datetime
import smtplib
def check_domain_expiry(domain):
try:
w = whois.whois(domain)
expiry_date = w.expiration_date
if isinstance(expiry_date, list):
expiry_date = expiry_date[0]
days_left = (expiry_date - datetime.datetime.now()).days
return days_left
except Exception as e:
print(f"Error checking {domain}: {e}")
return None
domains = ["example.com", "your-site.net"]
threshold = 30
for d in domains:
days = check_domain_expiry(d)
if days and days < threshold:
# 发送告警邮件(代码略)
print(f"⚠️ {d} 将在 {days} 天后到期!")
优点:依赖少(只需pip install python-whois),适合Linux/Windows。
脚本2:Bash版(适合Linux cron任务)
#!/bin/bash
DOMAINS=("example.com" "your-site.net")
THRESHOLD=30
for DOMAIN in "${DOMAINS[@]}"; do
EXPIRY=$(whois $DOMAIN | grep -i "Expiry Date" | head -1 | awk '{print $NF}')
if [ -n "$EXPIRY" ]; then
DAYS_LEFT=$(( ($(date -d "$EXPIRY" +%s) - $(date +%s)) / 86400 ))
if [ $DAYS_LEFT -lt $THRESHOLD ]; then
echo "⚠️ $DOMAIN 剩余 $DAYS_LEFT 天到期"
# 可添加发送微信告警命令
fi
fi
done
优点:零依赖,直接利用系统whois命令。
脚本3:PowerShell版(适合Windows服务器)
$domains = @("example.com", "your-site.net")
$threshold = 30
foreach ($domain in $domains) {
$whoisData = (whois $domain) | Out-String
$expiry = [regex]::Match($whoisData, 'Expiry Date:\s+(\S+)').Groups[1].Value
if ($expiry) {
$daysLeft = ([datetime]$expiry - (Get-Date)).Days
if ($daysLeft -lt $threshold) {
Write-Host "⚠️ $domain 剩余 $daysLeft 天到期"
}
}
}
脚本部署与自动化告警配置
1 定时任务设置
- Linux:添加cron任务,每天8点执行Bash脚本
0 8 * * * /path/to/check_domain.sh >> /var/log/domain_check.log
- Windows:使用任务计划程序,设为每天运行PowerShell脚本。
2 告警渠道集成
- 邮件:使用QQ邮箱或阿里云邮件推送服务(需配置SMTP)
- 企业微信:通过机器人Webhook发送Markdown消息
- 短信:集成阿里云短信API(按需付费)
推荐配置:剩余30天告警 + 剩余7天再次告警 + 到期当天紧急告警。
常见问题问答(FAQ)
Q1:脚本检测不到某些域名?
A:部分域名(如.club、.top)的WHOIS字段名称不同,需调整正则表达式,建议先用whois 例子.com查看实际返回格式。
Q2:如何检测子域名(如blog.your-site.com)?
A:子域名通常属于主域,WHOIS只记录顶级域名,可直接检测“your-site.com”即可覆盖所有子域。
Q3:查询频率过高被WHOIS服务商封禁怎么办?
A:可采用以下策略:
- 增加随机延迟(如
time.sleep(2)) - 只检测剩余天数<60天的域名
- 改用付费WHOIS API(如WhoisXMLAPI)
Q4:脚本误报到期日错一天?
A:时区问题导致,解决方案:在代码中统一使用UTC时间对比,或手动调整datetime偏移量。
Q5:此脚本能否用于批量检测?
A:完全可以,只需将域名列表写入文本文件,逐行读取即可,Python版示例:
with open("domains.txt") as f:
for line in f:
check_domain_expiry(line.strip())
从被动救火到主动预防
域名到期看似小事,但引发的连锁反应(网站关闭、邮件中断、品牌损失)代价高昂,通过部署域名到期自动检测脚本,运维人员可以:
- 降低人为疏忽风险
- 将精力聚焦在核心业务优化
- 建立自动化运维体系
建议立即动手,用10分钟配置一个基础脚本,并搭配企业微信/邮件告警。好的工具不是让你跑得更快,而是让你在风险来临前就准备好。