宝塔面板Let’s Encrypt自动续签未触发是因定时任务未配置或频率不当;需在【计划任务】中添加/编辑Shell任务,设为每天03:00执行acme_v2.py --renew=1命令,并确保用户为root。

如果您在宝塔面板中已启用Let’s Encrypt证书自动续签功能,但发现续签未按预期时间触发,则可能是由于自动续签检测频率未正确配置。以下是调整该频率的具体操作路径与方法:
一、通过计划任务调整续签执行周期
宝塔面板默认不主动轮询证书到期状态,其“自动续签”依赖于用户手动添加的定时任务来周期性调用ACME续签脚本。该任务的执行频率直接决定检测与续签的触发间隔。
1、登录宝塔面板后台,点击左侧菜单栏【计划任务】。
2、在计划任务列表中,查找名称包含“续签”或“acme_v2.py”的Shell类型任务。
3、若任务存在,点击右侧【编辑】;若不存在,点击【添加计划任务】。
4、在【执行周期】选项中,选择符合需求的时间频率:推荐设置为每天凌晨3:00执行(即“每天 03:00”),兼顾验证成功率与系统负载。
5、在【脚本内容】中确认命令为:/www/server/panel/pyenv/bin/python /www/server/panel/class/acme_v2.py --renew=1。
6、确保【执行用户】为root,点击【保存】完成配置。
二、修改ACME客户端内置检测逻辑(高级)
宝塔面板的acme_v2.py脚本本身不包含独立的“检测频率”参数,但可通过注入时间判断逻辑,使续签仅在证书剩余有效期低于指定天数时才执行,从而实现条件化检测。
1、使用SSH连接服务器,执行命令打开ACME脚本:nano /www/server/panel/class/acme_v2.py。
2、定位到main函数或renew_cert相关逻辑块,在调用续签前插入条件判断语句。
3、添加如下Python代码片段(示例:仅当剩余天数≤25时续签):if cert_remaining_days 。
4、保存文件并退出编辑器。
5、重启宝塔面板服务以加载变更:bt restart。
三、利用宝塔API配合外部监控脚本轮询
该方法绕过面板界面限制,通过调用宝塔开放API接口获取各站点证书剩余天数,并由外部脚本控制检测节奏,适用于多站点精细化管理场景。
1、在宝塔面板【安全】设置中开启API并记录接口地址、密钥及请求令牌生成规则。
2、编写一个外部Python或Shell脚本,每6小时向/acme?action=get_sites_ssl_status发送GET请求。
3、解析返回JSON数据,提取每个站点的ssl_end_time字段,计算剩余天数。
4、当任一站点剩余天数≤30时,立即触发续签请求:POST /acme?action=renew_cert with index=xxx。
5、将该脚本加入系统crontab,设置为0 */6 * * *(每六小时执行一次)。










