Docker容器环境下Certbot SSL证书自动续期脚本失效问题排查
解决Certbot自动续期脚本无法运行的问题
常见问题排查与修复步骤
1. 脚本权限与工作目录问题
- 先给脚本添加可执行权限:
chmod +x ssl_renew.sh - 脚本执行时默认不会自动切换到
docker-compose.yml所在目录,必须在脚本开头指定工作目录,比如你的配置文件在/opt/my-app下,脚本第一行写:
(cd /opt/my-app || exit 1|| exit 1保证切换目录失败时直接退出,避免后续命令执行出错)
2. 使用Docker命令的绝对路径
crontab的环境变量PATH可能不包含Docker的安装路径,所以脚本里的Docker命令要用绝对路径。先执行which docker找到路径(比如/usr/bin/docker),然后修改脚本里的命令:
/usr/bin/docker compose run certbot renew --dry-run
3. 调试脚本与Crontab日志
- 先手动执行脚本,确认是否能正常运行:
如果报错,直接根据输出排查问题。./ssl_renew.sh - 修改crontab配置,添加日志输出,方便定位错误:
(每天凌晨3点执行,所有输出包括错误都会写入日志文件)0 3 * * * /path/to/ssl_renew.sh >> /var/log/certbot_renew.log 2>&1
4. 完善脚本功能(可选)
如果证书续期成功后需要重启Nginx生效,在脚本里添加重启命令:
# 续期命令 /usr/bin/docker compose run certbot renew --dry-run # 检查续期是否成功,成功则重启Nginx if [ $? -eq 0 ]; then /usr/bin/docker compose restart nginx fi
5. Crontab环境变量配置
如果还是有问题,在crontab开头指定完整的PATH环境变量:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 3 * * * /path/to/ssl_renew.sh >> /var/log/certbot_renew.log 2>&1
内容的提问来源于stack exchange,提问作者4ctive
相关产品推荐
相关产品推荐

