宝塔定时任务实现SSL证书自动续期教程
宝塔面板可以通过添加Shell计划任务,自动为站点续期Let's Encrypt SSL证书。
你只需确认服务器已安装acme.sh,将续期脚本填入计划任务并设置每月执行一次,之后证书过期前会自动续签,无需人工干预。
整个配置过程约10分钟,适合没有编程经验的用户。
动手之前确认这三个条件
- 站点已开启Let's Encrypt证书:在宝塔面板左侧“网站”中找到对应站点,确认SSL管理界面已成功签发证书。
- acme.sh已安装:宝塔默认携带acme.sh,但版本可能较老。执行
acme.sh --version检查,若未安装可用curl https://get.acme.sh | sh安装。 - 计划任务可正常执行:在宝塔“计划任务”中随意创建一个简单的Shell任务(如
echo test),手动执行一次确认状态为成功。
编写自动续期脚本
复制以下脚本,替换 yourdomain.com 为你的实际域名:
#!/bin/bash
# 续期指定域名证书(可重复使用参数)
acme.sh --renew -d yourdomain.com --force
# 续期成功后需重载Web服务使新证书生效
/etc/init.d/nginx reload
- 如果你使用Apache,将最后一行改为
/etc/init.d/httpd reload。 - 重载操作也可写成
nginx -s reload,取决于你的系统。 - 需要续期多个域名时,可以续一行
acme.sh --renew -d domain2.com --force再nginx reload,但建议每个域名单独任务,更易排错。
在宝塔面板添加计划任务
- 登录宝塔后台,点击左侧“计划任务”。
- 点击“添加任务”,任务类型选 Shell脚本。
- 任务名称填写“SSL自动续期”(可自定)。
- 执行周期:选择“自定义”,输入
0 3 1 * *(每月1日凌晨3点执行),你也可以选“每月”并指定1号。 - 脚本内容粘贴上方编写的脚本(注意替换域名)。
- 点击“添加”保存。
- 添加后,在任务列表右侧点击“执行”测试一次,查看执行日志是否有报错。
容易踩坑的几点说明
- acme.sh版本过旧:宝塔默认带的acme.sh可能不支持某些续期参数,建议升级:
acme.sh --upgrade。 - 证书路径权限:Let's Encrypt证书默认存放在
/usr/local/panel/ssl/或类似路径,确保计划任务以root用户执行(宝塔默认以root运行计划任务)。 - 续期频次限制:Let's Encrypt对每域名每周最多续期5次,每月执行一次完全安全。不要设置每天执行。
- Web服务重载失败:如果服务器内存不足或nginx配置错误,重载会失败。手动执行脚本后,用
nginx -t检查配置。
验证自动续期是否生效
- 手动触发:在计划任务列表点击刚创建的任务右边的“执行”,查看日志最末是否显示
Reload Success或Certificate renewed。 - 查看证书到期时间:在本地终端或在线工具运行以下命令:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -dates
输出中的 notAfter 日期即为到期时间。
如果续期成功,该日期应更新为当前时间后约90天。
- 宝塔SSL管理:站点设置→SSL→Let's Encrypt右侧会显示到期时间,手动刷新查看是否更新。
常见问题
Q1: 宝塔面板自带SSL续期功能吗?
宝塔提供手动续期(一键点击),但无法自动按计划执行。
本文通过计划任务间接实现自动续期,不受面板版本限制。
Q2: 脚本执行后提示“未找到acme.sh”怎么解决?
确认acme.sh安装路径(默认 /root/.acme.sh/acme.sh)。
如果未安装,执行官方安装脚本:curl https://get.acme.sh | sh 并重启终端。
计划任务脚本中建议使用绝对路径 /root/.acme.sh/acme.sh --renew ...。
Q3: 续期成功后网站仍提示证书过期?
很可能Web服务没有重载。
检查脚本中是否包含 nginx reload 或 httpd reload,并确认该命令执行成功。
也可以手动重启Web服务后再刷新。
Q4: 这个方法支持泛域名证书吗?
支持。
但需要配置acme.sh使用DNS API验证,脚本中需额外添加 --dns dns_cf 等参数,且需提前设置API Token。
如果不熟悉,建议单独为泛域名创建任务。
如果你正在用宝塔管理网站,按本文步骤配置定时续期后,SSL证书管理基本可以“甩手”。
遇到报错时,优先回看“避坑说明”,确认acme.sh版本、权限和重载命令是否正常。