宝塔自动续签失效因计划任务丢失,需手动重建;申请失败优先改DNS验证;续签成功后须检查Nginx重载;ACME缓存损坏需清理letsencrypt.json等文件。

自动续签任务不见了,证书就静默过期
宝塔的自动续签不是后台常驻服务,而是靠计划任务每天调用一次脚本。如果这个任务被删了,证书到期后不会有任何提示,直接变不安全。
常见原因包括面板升级重置配置、手动清空过计划任务、或误点删除。登录宝塔 → 【计划任务】→ 搜索“Let’s Encrypt”或“SSL”,没结果就是丢了。
- 新建任务:类型选【Shell脚本】,周期设【每天 02:00】(和官方默认一致)
- 脚本内容严格复制:
/www/server/panel/pyenv/bin/python /www/server/panel/class/acme_v2.py --renew=1 - 执行用户必须是
root,不能用普通用户,否则权限不足写不了证书文件 - 添加后立刻点【执行一次】,看日志里有没有
|- 开始续签域名或renew success字样
Let’s Encrypt申请失败,优先切DNS验证
国内服务器申请失败,90% 是因为 Let’s Encrypt 的 ACME 服务器在国外,HTTP-01 验证走不通——比如你开了 CDN、80 端口被封、NAT 映射没配好,或者 DNS 解析还没切到当前服务器。
DNS-01 验证完全绕过 HTTP 访问,靠调用云厂商 API 自动加删 _acme-challenge TXT 记录,更适合自动续签。
- 进网站 → 【SSL】→ 【Let’s Encrypt】→ 【设置】→ 把验证方式从“文件验证”改成“DNS 验证”
- 选对应 DNS 服务商(如阿里云、腾讯云),填入 RAM 子账号的
AccessKey ID和AccessKey Secret(别用主账号 AK) - 去 DNS 控制台手动清掉所有以
_acme-challenge开头的旧 TXT 记录,否则新验证会超时 - 保存后点【申请】或【续签】,全程无端口依赖
续签成功但浏览器还是报证书过期
这是最隐蔽的问题:脚本显示“续签成功”,但 Nginx/Apache 没 reload,或者 reload 静默失败了。你看到的仍是旧证书。
原因可能是 Nginx 配置语法错误、进程卡死、磁盘满、或证书路径写错,而宝塔脚本默认不检查 reload 结果。
- 每次续签后,手动执行:
nginx -t确认语法正确,再执行bt restart nginx - 更稳妥的做法:把检查逻辑加进计划任务脚本末尾,例如:
/www/server/panel/pyenv/bin/python /www/server/panel/class/acme_v2.py --renew=1 && nginx -t && bt restart nginx - 别只信日志,打开浏览器访问
https://你的域名,点地址栏锁图标 → 查看证书 → 看有效期是否已更新为新日期
ACME 缓存损坏会导致批量续签全挂
当多个站点一起续签失败,且日志里没有具体域名报错,大概率是 acme_v2.py 的本地缓存或订单状态出问题了——比如 letsencrypt.json 文件异常、旧证书吊销状态未同步、或 ACME 客户端内部索引混乱。
- 删 ACME 全局缓存:
rm -f /www/server/panel/config/letsencrypt.json - 清站点级验证缓存:
rm -rf /www/wwwroot/.well-known/acme-challenge/(若存在) - 清面板运行时缓存:
bt 14→ 选“清除面板缓存”,再执行bt restart - 进【SSL】页面,把所有显示“已过期”或“验证失败”的证书条目点【删除】彻底移除
这些缓存残留不清理,哪怕换 DNS 验证也照样卡在“验证中”不动。


















