自动化监控与预警实战指南
目录导读
- 为什么需要域名过期提醒脚本?
- 核心原理:域名WHOIS信息与检测机制
- 工具与环境准备
- 编写基础提醒脚本(Python+whois库)
- 进阶:多域名批量检测与邮件/钉钉/微信通知
- 高频问题答疑(FAQ)
- SEO优化建议:让脚本内容被更多人搜索到
为什么需要域名过期提醒脚本?
域名过期是网站运营中“最隐蔽的灾难”——根据统计,全球每年有超过3000万个域名因未续费被释放,其中大量属于企业核心业务,手动检查每个域名的到期日不仅效率低下,且容易遗漏,一个自动化的过期提醒脚本,能在域名到期前30天、7天、1天分别发送警报,避免因“忘记续费”导致网站宕机、品牌被抢注、SEO权重归零等严重后果。

核心价值:
- 降低人力监控成本
- 实现24/7实时检测
- 支持多域名、多种通知渠道(邮件、IM工具、短信)
核心原理:域名WHOIS信息与检测机制
所有域名注册信息都存储在WHOIS数据库中,包含:
- 注册日期(Creation Date)
- 到期日期(Expiration Date)
- 域名状态(Active/Expired/RedemptionPeriod)
检测流程:
- 通过公共WHOIS服务器或API获取域名的WHOIS记录
- 解析出Expiration Date字段
- 计算当前时间与到期日的时间差
- 根据预设阈值(30天)触发提醒
注意: WHOIS查询有频率限制(通常每秒1-5次),且部分注册商(如国内的阿里云、腾讯云)会屏蔽频繁请求,需使用缓存或付费API(如Whois XML API)。
工具与环境准备
推荐技术栈
- 编程语言: Python(库丰富,跨平台)
- 核心库:
python-whois(免费,支持大多数顶级域名) - 通知库:
smtplib(邮件)、requests(Webhook如钉钉、企业微信) - 调度工具: Linux Crontab(定时任务)或Windows任务计划程序
安装命令
pip install python-whois requests schedule
编写基础提醒脚本(Python+whois库)
以下是一个单域名检测脚本,输出剩余天数并发送邮件警报:
import whois
import smtplib
from email.mime.text import MIMEText
from datetime import datetime
# 配置
DOMAIN = "example.com" # 请替换为实际域名
ALERT_DAYS = [30, 7, 1] # 触发提醒的天数阈值
SMTP_SERVER = "smtp.qq.com" # 邮件服务器
SMTP_PORT = 587
EMAIL_ADDR = "your@email.com"
EMAIL_PASS = "your_app_password" # 使用授权码,不要用登录密码
def check_domain_expiry(domain):
try:
w = whois.whois(domain)
if w.expiration_date:
# whois返回可能是列表或单个日期
exp_date = w.expiration_date[0] if isinstance(w.expiration_date, list) else w.expiration_date
days_left = (exp_date - datetime.now()).days
return days_left, ex_date
except Exception as e:
print(f"查询失败: {e}")
return None, None
def send_alert(domain, days_left, ex_date):
subject = f"[警告] 域名 {domain} 将在 {days_left} 天后过期!"
body = f"域名:{domain}\n到期日:{ex_date}\n剩余天数:{days_left}\n请尽快续费!"
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = EMAIL_ADDR
msg['To'] = EMAIL_ADDR
with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
server.starttls()
server.login(EMAIL_ADDR, EMAIL_PASS)
server.send_message(msg)
print(f"警报邮件已发送至 {EMAIL_ADDR}")
if __name__ == "__main__":
days_left, ex_date = check_domain_expiry(DOMAIN)
if days_left is not None and days_left in ALERT_DAYS:
send_alert(DOMAIN, days_left, ex_date)
elif days_left is not None:
print(f"域名 {DOMAIN} 剩余 {days_left} 天,未触发警报")
运行方式:
python domain_checker.py
进阶:多域名批量检测与邮件/钉钉/微信通知
1 批量读取域名列表
创建 domains.txt,每行一个域名,脚本统一读取:
def load_domains(file_path="domains.txt"):
with open(file_path, 'r') as f:
return [line.strip() for line in f if line.strip() and not line.startswith('#')]
2 多通知渠道集成
钉钉机器人(Webhook):
import requests
def send_dingtalk(domain, days_left):
webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
data = {"msgtype": "text", "text": {"content": f"域名{domain}即将过期(剩余{days_left}天)"}}
requests.post(webhook_url, json=data)
企业微信机器人:
def send_wechat(domain, days_left):
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
data = {"msgtype": "text", "text": {"content": f"⚠️域名过期提醒:{domain}剩余{days_left}天"}}
requests.post(webhook, json=data)
3 定时任务配置(Linux Crontab)
每天8点执行检测:
0 8 * * * /usr/bin/python3 /home/user/domain_checker.py
高频问题答疑(FAQ)
Q1:脚本检测结果是“None”或报错,怎么回事?
A:可能原因:
- 域名刚刚注册或WHOIS缓存未更新(建议等待10分钟)
- 域名后缀不被python-whois支持(如大部分.cn域名)→ 改用微软的
Whois.netAPI或国内服务商 - 网络被WHOIS服务器屏蔽→ 添加随机延迟(time.sleep(1))或更换WHOIS服务器
Q2:如何让提醒更智能,比如只在我需要的时候发?
A:增加“静默模式”变量(如SILENT_DAYS = [0, -1]),仅当剩余天数恰好等于阈值时触发;或者使用“每减少1天仅提醒1次”的日志记录机制。
Q3:免费WHOIS库有查询次数限制吗?
A:大部分公共WHOIS服务器限制单个IP每秒1次查询,若要监控100个以上域名,建议购买付费API(如Whois API 0.02美元/次)或使用注册商自带的监控功能。
Q4:脚本能检测域名注册商变更吗?
A:可以,通过WHOIS的“Registrar”字段监控注册商名称变化,若有变更则发送警报(防范域名被盗)。
SEO优化建议:让脚本内容被更多人搜索到
1 关键词布局策略
- 主要关键词: “域名过期提醒脚本”、“WHOIS检测脚本”、“Python域名监控”
- 长尾关键词: “钉钉域名到期提醒”、“企业微信域名监控”、“Linux定时检测域名”
- 自然融入: 在标题、H2/H3标签、首段、结尾各出现1-2次
2 提升文章可读性
- 使用表格对比不同WHOIS库的优缺点(如python-whois vs whoisx)
- 提供完整代码的GitHub Gist链接(增加外链权重)
- 添加真实案例:某公司因未续费导致品牌域名被竞品抢注的损失数据
3 移动端适配与加载速度
- 代码块使用短行(不超过60字符),避免横向滚动
- 图片使用WebP格式,压缩至200KB以内
- 内链链接到相关文章(如“Linux Crontab教程”、“SMTP发送邮件指南”)
编写域名过期提醒脚本的核心在于:精准获取WHOIS时间 + 灵活的警报机制 + 稳定的定时调度,本文从零开始的Python实现、多通知渠道集成到SEO优化完全覆盖,您可直接复制代码,搭配Crontab即可拥有一套自动化的域名监控系统,建议定期(每季度)更新脚本中的WHOIS解析库,并添加异常日志记录(logging模块),以应对注册商接口变化。