Appearance
定时任务命令
CertiMan CLI 内置定时任务能力,用于自动扫描需要续期的证书并完成续期与部署。cron 是由系统调度器调用的入口命令;cron install / cron uninstall / cron status 用于管理系统调度器中的任务条目。
所有命令都可以叠加 全局 flag。
命令一览
| 命令 | 作用 |
|---|---|
cron(本页) | 执行一轮证书续期扫描(系统调度器调用的入口命令) |
cron install | 在系统调度器中注册定时任务 |
cron uninstall | 反注册系统调度器中的定时任务 |
cron status | 查看定时任务当前状态与最近一次执行结果 |
cron
执行一轮证书续期扫描:读取本机所有 renew.auto_cert=true 的证书,对已过期或进入续期窗口的证书自动执行 renew 与 deploy。
同一时刻只执行一轮扫描。调度触发时若上一轮仍在执行,本轮静默跳过,不视为错误。若上一轮长时间没有进展,判定为停滞,本命令报错退出,需要手动结束停滞的 certiman 进程。
定时任务的日志与手动运行的命令写入同一文件 ~/.certiman/logs/cc-<年月>.log。
续期决策流程
每轮扫描按下图逐张判定证书:renew.auto_cert 决定证书是否纳入自动续期,续期窗口决定续期时间,renew.auto_order 决定订单服务期结束后是否自动续费(将产生费用)。
图中的判定项:
- 同一时刻只执行一轮:调度触发时若上一轮仍在执行,本轮静默跳过;上一轮长时间没有进展时判定为停滞并报错
- 证书被占用时跳过:某张证书正由其他 certiman 进程处理时(例如另一个终端中的
issue正在等待输入),本轮跳过该证书并继续处理其余证书,下一轮自动重试 auto_cert:证书配置cert.yaml中的renew.auto_cert,默认false。未开启的证书不参与自动续期- 续期窗口:
renew.days_before与 ARI 二选一,按以下顺序判定:- 已过期:证书已过期时直接续期(优先级最高,适用于两种判定方式)
renew.days_before大于0:按剩余天数判定;未进入该窗口时,按剩余有效期比例判定。该方式不请求 ARIrenew.days_before等于0:按 ARI 建议窗口(renewal-info)判定,续期时间以 CA 给出的建议为准;平台未给出建议窗口时,按剩余有效期比例判定- 剩余有效期比例:作为前两种方式的回退判据,按证书剩余有效期占总有效期的比例判定
- 吊销状态:
revoked状态的证书同样会续期。是否续期只取决于有效期与续期窗口,与吊销状态无关;续期得到的新证书将替换已吊销的证书 - 服务期内:CertCloud 长服务期订单在服务期内可在同一订单上多次续期,不额外计费;服务期结束后,续期需要创建新订单
auto_order:证书配置中的renew.auto_order,默认false,开启后授权订单到期自动续费(将产生费用);未开启时,cron只将该证书记入attention(待人工处理项),不创建新订单
说明:
auto_cert默认false:需要为每张证书单独开启自动续期- 待人工处理项:运行
certiman cron status,在attention段查看。常见原因包括:订单服务期已结束且未开启renew.auto_order;续期失败后处于停滞状态;证书已签发但缺少到期时间,无法判断续期窗口。缺少到期时间时,先运行certiman status -d <主域名>刷新平台状态,仍为空时运行certiman download -d <主域名>重新下载证书
用法
bash
certiman cron参数
本命令没有自有参数。
示例
bash
# 手动触发一次扫描(等同于调度器自动拉起)
certiman cron
# 查看扫描细节(stderr 输出 debug 日志)
certiman cron -v输出
排查"为什么这张证书没续期"
~/.certiman/logs/cc-<年月>.log 中,每张证书处理期间的日志(包括 HTTP 请求记录)都带有 [<证书目录名>] 标记。排查时可用 grep 筛选单张证书的完整日志:
bash
grep '\[example.com\]' ~/.certiman/logs/cc-2026-08.log定时任务每一轮的日志还带有 round=… 标记:grep 'round=' 筛选定时任务的日志,grep -v 'round=' 筛选手动运行的命令的日志。
其中 renewal decision 行记录本轮是否续期及判定依据:
text
INFO [example.com] renewal decision due=false reason=ratio-pending days_left=45 not_after=2027-01-15T00:00:00Z days_before=0 forced=false ari="empty: platform returned no suggested window"字段含义:
| 字段 | 含义 |
|---|---|
due | 本轮是否触发续期(true / false) |
reason | 判定依据:ari / days-before / ratio / forced / expired;带 -pending 后缀表示该级已判定但未达到阈值(例如 ratio-pending 表示已按剩余有效期比例判定,但未达到阈值) |
days_left | 距 not_after 的剩余天数 |
not_after | 证书到期时间(RFC 3339) |
days_before | cert.yaml.renew.days_before 的当前值 |
forced | 是否由 -f 强制触发 |
ari | ARI(renewal-info)拉取结果:window <起> .. <止> / empty: platform returned no suggested window / unavailable: <err> / skipped: no cert id yet / skipped: renew.days_before configured(已设置 renew.days_before,未请求 ARI) |
配合 round started managed=<N>(本轮纳管清单)与 certificate finished outcome=<...> status=<...> elapsed=<...>(每张证书处理结束的汇总)三段日志,可确认每张证书本轮是否续期及其原因。
相关文档
- 证书命令 · renew —— 手动续期与自动续期
- 部署命令 —— 定时任务续期后自动执行的部署 hook
- 运维命令 · doctor —— 检查 cron 注册状态与最近一次执行
