Skip to main content

Cron 故障排除

当 Cron 任务未按预期运行时,请按以下步骤逐一排查。大多数问题可归为四类:时间安排、交付失败、权限问题或技能加载失败。


任务未触发

检查 1:确认任务存在且处于激活状态

hermes cron list

查找该任务,并确认其状态为 [active](而非 [paused][completed])。若显示 [completed],可能是重复次数已耗尽——请编辑任务以重置次数。

检查 2:确认调度表达式正确

格式错误的调度表达式会静默降级为一次性任务,或直接被拒绝。请测试您的表达式:

您的表达式应该解析为
0 9 * * *每天上午 9:00
0 9 * * 1每周一上午 9:00
every 2h从现在起每 2 小时一次
30m30 分钟后执行一次
2025-06-01T09:00:002025 年 6 月 1 日上午 9:00 UTC

如果任务只执行一次后就从列表中消失,说明这是一个一次性调度(30m1d 或 ISO 时间戳)——属于正常行为。

检查 3:网关是否正在运行?

Cron 任务由网关的后台计时器线程触发,该线程每 60 秒 tick 一次。常规 CLI 对话 不会 自动触发 Cron 任务。

如果您期望任务自动运行,必须确保有一个正在运行的网关(hermes gatewayhermes serve)。对于临时调试,可通过命令 hermes cron tick 手动触发一次 tick。

检查 4:检查系统时间和时区

任务使用本地时区。如果您的机器时间不准确,或时区与预期不符,任务将在错误的时间触发。请验证:

date
hermes cron list # Compare next_run times with local time

交付失败

检查 1:确认交付目标正确

交付目标区分大小写,且需要正确配置对应平台。配置错误的目标会静默丢弃响应。

目标所需配置
telegramTELEGRAM_BOT_TOKEN 中配置 ~/.hermes/.env
discordDISCORD_BOT_TOKEN 中配置 ~/.hermes/.env
slackSLACK_BOT_TOKEN 中配置 ~/.hermes/.env
whatsapp配置 WhatsApp 网关
signal配置 Signal 网关
matrix配置 Matrix homeserver
emailconfig.yaml 中配置 SMTP
sms配置 SMS 服务商
local~/.hermes/cron/output/ 具有写入权限
origin发送到创建任务的聊天中

其他支持的平台包括 mattermosthomeassistantdingtalkfeishuwecomweixinbluebubbleswebhook。您也可以通过 platform:chat_id 语法指定特定聊天(例如 telegram:-1001234567890)。

若交付失败,任务仍会运行——只是无法发送结果。请检查 hermes cron list 中的更新 last_error 字段(如可用)。

检查 2:检查 [SILENT] 使用情况

如果您的 Cron 任务无输出,或代理返回 [SILENT],则交付被抑制。这是监控任务的故意设计——但请确认您的提示词是否意外抑制了所有内容。

一个提示如“若无变化则返回 [SILENT]”也会静默吞下非空响应。请检查您的条件逻辑。

检查 3:平台令牌权限

每个消息平台的机器人需要特定权限才能接收消息。若交付静默失败:

  • Telegram:机器人必须是目标群组/频道的管理员
  • Discord:机器人必须在目标频道拥有发送权限
  • Slack:机器人必须加入工作区,并具有 chat:write 范围权限

检查 4:响应包装

默认情况下,Cron 响应会被添加头部和尾部(cron.wrap_response: trueconfig.yaml 中)。某些平台或集成可能无法良好处理此包装。如需禁用:

cron:
wrap_response: false

技能加载失败

检查 1:确认技能已安装

hermes skills list

技能必须先安装,才能附加到 Cron 任务。若缺少技能,请先通过 hermes skills install <skill-name> 或 CLI 中的 /skills 安装。

检查 2:检查技能名称 vs. 技能文件夹名称

技能名称区分大小写,必须与已安装技能的文件夹名称完全匹配。若任务中指定 ai-funding-daily-report,但实际文件夹名为 ai-funding-daily-report,请通过 hermes skills list 确认确切名称。

检查 3:依赖交互工具的技能

Cron 任务运行时禁用了 cronjobmessagingclarify 工具集。这可防止递归 Cron 创建、直接发送消息(交付由调度器处理)以及交互式提示。若某技能依赖这些工具集,则在 Cron 环境中无法运行。

请查阅该技能文档,确认其是否支持非交互模式(无头模式)。

检查 4:多技能加载顺序

使用多个技能时,它们按顺序加载。若 Skill A 依赖 Skill B 的上下文,请确保 B 先加载:

/cron add "0 9 * * *" "..." --skill context-skill --skill target-skill

在此例中,context-skilltarget-skill 之前加载。


任务错误与失败

检查 1:查看最近的任务输出

若任务已运行但失败,您可在以下位置看到错误信息:

  1. 任务交付的聊天中(若交付成功)
  2. ~/.hermes/logs/agent.log 中的调度器消息(或 errors.log 中的警告)
  3. 通过 hermes cron list 查看任务的 last_run 元数据

检查 2:常见错误模式

“没有这样的文件或目录”(针对脚本)
script 路径必须是绝对路径(或相对于 Hermes 配置目录的相对路径)。请验证:

ls ~/.hermes/scripts/your-script.py   # Must exist
hermes cron edit <job_id> --script ~/.hermes/scripts/your-script.py

“找不到技能”在任务执行时 该技能必须安装在运行调度器的机器上。若您在不同机器间切换,技能不会自动同步——请使用 hermes skills install <skill-name> 重新安装。

任务运行但无任何交付 很可能是交付目标问题(参见“交付失败”部分),或响应被静默抑制([SILENT])。

任务卡住或超时 调度器使用基于不活动的超时机制(默认 600 秒,可通过 HERMES_CRON_TIMEOUT 环境变量配置,0 可设为无限)。只要代理持续调用工具,计时器就不会触发;仅在长时间无活动后才会超时。长时间运行的任务应使用脚本处理数据收集,仅传递最终结果。

检查 3:锁竞争

调度器使用文件锁防止重复 tick。若运行了两个网关实例(或 CLI 会话与网关冲突),任务可能会延迟或跳过。

终止重复的网关进程:

ps aux | grep hermes
# Kill duplicate processes, keep only one

检查 4:jobs.json 权限

任务存储在 ~/.hermes/cron/jobs.json 中。若该文件对您的用户不可读/不可写,调度器将静默失败:

ls -la ~/.hermes/cron/jobs.json
chmod 600 ~/.hermes/cron/jobs.json # Your user should own it

性能问题

任务启动缓慢

每个 Cron 任务都会创建一个全新的 AIAgent 会话,可能涉及提供方认证和模型加载。对于时间敏感的调度,请预留缓冲时间(例如使用 0 8 * * * 而非 0 9 * * *)。

过多重叠任务

调度器在每个 tick 内串行执行任务。若多个任务在同一时间到期,将依次运行。建议错开调度时间(例如 0 9 * * *5 9 * * *,而非均在 0 9 * * * 执行),以避免延迟。

大量脚本输出

脚本输出数兆字节的数据会拖慢代理并可能触及 token 限制。应在脚本层面进行过滤或摘要处理——仅输出代理推理所需的内容。


诊断命令

hermes cron list                    # Show all jobs, states, next_run times
hermes cron run <job_id> # Schedule for next tick (for testing)
hermes cron edit <job_id> # Fix configuration issues
hermes logs # View recent Hermes logs
hermes skills list # Verify installed skills

获取更多帮助

如果您已按本指南排查但仍存在问题:1. 使用 hermes cron run <job_id> 运行任务(将在下一个网关周期触发),并观察聊天输出中的错误信息
2. 检查 ~/.hermes/logs/agent.log 中的调度器消息,以及 ~/.hermes/logs/errors.log 中的警告信息
3. 在 github.com/NousResearch/hermes-agent 提交问题时,请包含:

  • 任务 ID 和调度计划
  • 消息投递目标
  • 你预期的行为与实际发生的情况
  • 日志中相关的错误信息

有关完整的 cron 参考信息,请参阅 使用 Cron 自动化任何事情计划任务(Cron)