Skip to content

定时任务命令 ​

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 二选一,按以下顺序判定:
    1. 已过期:证书已过期时直接续期(优先级最高,适用于两种判定方式)
    2. renew.days_before 大于 0:按剩余天数判定;未进入该窗口时,按剩余有效期比例判定。该方式不请求 ARI
    3. renew.days_before 等于 0:按 ARI 建议窗口(renewal-info)判定,续期时间以 CA 给出的建议为准;平台未给出建议窗口时,按剩余有效期比例判定
    4. 剩余有效期比例:作为前两种方式的回退判据,按证书剩余有效期占总有效期的比例判定
  • 吊销状态: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

输出 ​

0成功(示例)
text
» alg20481852.example.com 未进入续期窗口(剩余 198 天),下次评估随下轮扫描
» alg30721852.example.com 未进入续期窗口(剩余 28 天),下次评估随下轮扫描
» example.com 未进入续期窗口(剩余 198 天),下次评估随下轮扫描
✔ 本轮扫描完成:推进 0,无需处理 3,待人工 0,失败 0,跳过 0
0已有扫描正在执行(静默)
text

排查"为什么这张证书没续期" ​

~/.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_beforecert.yaml.renew.days_before 的当前值
forced是否由 -f 强制触发
ariARI(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=<...>(每张证书处理结束的汇总)三段日志,可确认每张证书本轮是否续期及其原因。

相关文档 ​