-
-
Notifications
You must be signed in to change notification settings - Fork 5.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Feature] 新增一个deploy重试机制,在cron中重试deploy #4845
Comments
Please upgrade to the latest code and try again first. Maybe it's already fixed. |
@shaojs321 问题在于日常的cron是无人值守的,显然我每天--force一次是不太合理的。 |
可以, 这看起来的确是一个问题. |
@Neilpang 我对这个问题进一步分析了一下,我目前有以下想法: 1. 记录安装部署的结果在 Q1. 这里记返回值(错误码)还是记时间戳?
2. 添加
|
if [ -z "$FORCE" ] && [ "$Le_NextRenewTime" ] && [ "$(_time)" -lt "$Le_NextRenewTime" ]; then | |
_info "Skipping. Next renewal time is: $(__green "$Le_NextRenewTimeStr")" | |
_info "Add '$(__red '--force')' to force renewal." | |
if [ -z "$_ACME_IN_RENEWALL" ]; then | |
if [ $_set_level -ge $NOTIFY_LEVEL_SKIP ]; then | |
_send_notify "Renew $Le_Domain skipped" "Good, the cert is skipped." "$NOTIFY_HOOK" "$RENEW_SKIP" | |
fi | |
fi | |
return "$RENEW_SKIP" | |
fi |
新增 _ensure_install
和 _ensure_deploy
函数,在 renew
函数的 5473 行之前调用。
即刷新操作因为时间没到而被跳过的时候,检查证书的安装部署。
具体检查方式如上述第 1 点所述,如果需要重试,就调用对应的 installcert <domain>
或 _deploy <domain> <hook>
。
Q2. 是否只在 cron 环境下做部署重试?
感觉对所有的 renew 操作都做这个检查重试,好像也没什么问题。但如果不希望给 renew 命令带来副作用,那就加上判断。
需求背景
目前 acme.sh 有很多的 deploy-hook 。这些 hook 大多依赖一个外部服务。
当
acme.sh --cron
更新证书时,如果外部服务临时发生异常,无法与 acme.sh 正确通信,则这个 deploy-hook 会失败,证书未能正确部署。而在这之后,即使外部服务恢复正常,也会因为错过这次证书从而更新导致证书过期。当前行为
因为 acme.sh 下一次 cron 发现本地证书已经是最新的,在设定的有效期内,不需要更新,自然也就不触发 deploy 。所以即使外部服务恢复正常,也会发生证书过期。
举例(如果已经理解了以上内容就不用看了):
功能预期
在 deploy 的时候,记录每个 hook 的执行结果(return code),在下一次执行 --cron 的时候,检查每个 hook 上一次执行的结果,如果结果非0,则重新尝试 deploy 。
最后
麻烦 @Neilpang 大大评估一下这个功能设计能否被接受,如果可以接受,我可以之后抽空实现并提交 PR 。(当然如果大大或者其他好心人愿意帮忙实现那更是感激不尽)
The text was updated successfully, but these errors were encountered: