宝塔面板SSL自动续期失败需按五步修复:一、重建计划任务调用acme_v2.py;二、校验脚本权限与路径;三、清空acme.json缓存并重启面板;四、备用certbot-auto方案;五、强制更新面板证书元数据。

如果您发现宝塔面板中已配置的SSL证书自动续期任务未执行或续签失败,则可能是由于计划任务缺失、脚本路径错误、权限异常或ACME配置损坏导致。以下是修复宝塔面板定时任务以恢复自动续期功能的具体操作步骤:
一、检查并重建SSL自动续期计划任务
宝塔面板依赖计划任务调用acme_v2.py脚本触发续签逻辑,若该任务被误删或配置失效,将直接导致自动续期中断。需确认任务是否存在,并按标准参数重建。
1、登录宝塔面板后台,点击左侧菜单【计划任务】。
2、在任务列表中查找名称含“SSL”或“Let’s Encrypt”的Shell任务,若无结果,则说明任务已丢失。
3、点击【添加计划任务】,设置如下参数:
任务类型选择【Shell脚本】;
任务名称填写自动续签Let's Encrypt证书;
执行周期选择【每天】;
脚本内容粘贴以下命令:
/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew=1
4、点击【添加任务】,等待首次执行完成(可在任务日志中查看输出)。
二、验证并修正acme_v2.py脚本执行权限
acme_v2.py是宝塔内置ACME客户端核心模块,若其文件权限不正确或Python解释器路径失效,会导致计划任务静默失败。需手动校验并修复运行环境。
1、通过SSH连接服务器,执行命令检查脚本是否存在且可读:
ls -l /www/server/panel/class/acme_v2.py
2、若返回“No such file or directory”,说明面板版本升级后路径变更,需使用当前有效路径,例如:
/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme.py --renew=1
3、若权限不足,执行授权命令:
chmod +x /www/server/panel/class/acme_v2.py
4、测试脚本是否可独立运行:
/www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew=1
5、观察终端输出,确认出现|-开始续签域名xxx或续签成功字样。
三、重置ACME订单缓存与证书状态索引
acme_v2.py依赖orders配置缓存判断哪些证书需续签。当缓存损坏或域名已被删除但记录残留时,脚本会跳过所有站点。需强制刷新配置索引。
1、停止宝塔面板服务:
bt stop
2、备份原始配置:
cp /www/server/panel/vhost/cert/*.conf /www/backup/ssl_conf_bak_$(date +%s) 2>/dev/null || true
3、清空ACME订单缓存文件:
rm -f /www/server/panel/data/acme.json
4、重启面板并触发一次全量扫描:
bt start && /www/server/panel/pyenv/bin/python3 -u /www/server/panel/class/acme_v2.py --renew=1
5、检查输出中是否列出当前启用的网站域名,确认正在尝试去寻找其它可续签证书提示消失。
四、替换为certbot-auto兼容续签方案
当acme_v2.py持续无法识别到期证书时,可绕过宝塔内置逻辑,直接调用certbot-auto工具完成续签。该方式不依赖面板配置,稳定性更高。
1、确认certbot-auto已安装并可执行:
which certbot-auto || echo "未安装,请先执行:wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto"
2、手动执行一次续签验证:
/www/server/panel/certbot-auto renew --dry-run
3、若测试通过,创建独立计划任务:
任务名称填写certbot强制续签;
执行周期设为【每天】;
脚本内容填入:
/www/server/panel/certbot-auto renew --quiet --no-self-upgrade && systemctl reload nginx 2>/dev/null || true
4、保存后立即执行该任务,检查Nginx是否重载成功及证书文件更新时间:
stat /www/server/panel/vhost/cert/yourdomain.com/fullchain.pem | grep Modify
五、修复面板SSL证书管理界面同步异常
即使后台续签成功,若面板前端未同步证书有效期,仍会显示“已过期”。此问题多因证书文件硬链接断裂或数据库状态未刷新所致,需强制更新面板证书元数据。
1、进入【网站】页面,找到对应站点,点击【设置】→【SSL】。
2、在证书列表中,找到已续签成功的域名,点击右侧【查看】按钮。
3、在弹出窗口中核对【证书有效期】是否已更新为新日期,若仍为旧值,点击【强制更新】按钮(部分版本显示为【重载证书】)。
4、若无此按钮,执行数据库修复命令:
cd /www/server/panel && python tools.pyc panel ssl_update
5、刷新浏览器页面,确认SSL状态栏显示证书正常,剩余XX天。










