Loop 技能 —— 定时任务 / 循环执行

在 Claude Code 中按固定时间间隔重复执行命令或提示词

一、概述

Loop 是 Claude Code 内置的一项实用技能,用于在终端环境中按指定的时间间隔重复执行某条命令或某个提示词(Prompt)。当开发者需要持续监控、周期性检查或反复运行同一个任务时,Loop 技能可以将这些操作自动化,避免手动反复输入。

该技能的名称来源于"循环"(Loop)这一编程概念,其核心思想是:给定一个时间间隔和一个要执行的任务,系统会在到达每个时间点时自动再次执行该任务,直至用户手动停止或满足预设的退出条件。

Loop 技能让 Claude Code 具备"定时任务"能力,适用于监控、轮询和周期性检查等场景。

二、功能目的

在日常开发和运维工作中,有许多任务需要反复执行:检查部署是否完成、查看服务状态是否正常、监控日志中是否出现异常等。Loop 技能正是为了解决这类"周期性重复劳动"而设计。

其主要目的包括:

  • 自动化重复操作 —— 将需要多次手动执行的命令交由 Loop 自动运行。
  • 持续监控 —— 在长时间任务(如部署、测试)执行过程中,定期检查进度。
  • 即时反馈 —— 当某个条件满足时(如部署成功),Loop 可以第一时间展示结果。
  • 减少人为遗漏 —— 避免因忘记检查而导致的问题被延迟发现。
Loop 技能本身只负责"反复执行",具体的停止逻辑(如检测到特定输出后退出)需要结合任务内容自行实现。

三、基本语法

Loop 技能的调用采用斜杠命令格式,在 Claude Code 的对话输入框中直接输入即可。

/loop <时间间隔> <命令或提示词>

其中 <时间间隔> 指定每次执行之间的等待时长,<命令或提示词> 是每次循环时要运行的内容。

实际使用示例:

/loop 5m /status

上述命令表示每隔 5 分钟执行一次 /status 命令,持续检查当前状态。

如果未指定时间间隔,Loop 默认使用 10 分钟 作为间隔值:

/loop /check-deploy
语法格式为 /loop [间隔] [命令]。间隔省略时默认 10 分钟。

四、时间间隔说明

时间间隔参数支持多种时间单位,系统会自动解析并转换为对应的等待时长。支持的单位如下:

  • s —— 秒(seconds),如 30s 表示 30 秒。
  • m —— 分钟(minutes),如 5m 表示 5 分钟。
  • h —— 小时(hours),如 1h 表示 1 小时。

间隔值必须是正整数,不可以为 0 或负数。如果提供的单位不被识别,系统可能会报错或使用默认值。

/loop 30s /status # 每 30 秒执行一次 /loop 5m /deploy-check # 每 5 分钟执行一次 /loop 1h /healthcheck # 每 1 小时执行一次
建议轮询间隔不要过短(如 1-2 秒),以免对系统或 API 造成不必要的负担。对于大多数监控场景,30 秒到 5 分钟是比较合理的范围。

五、使用场景

Loop 技能在开发、测试和运维工作中有广泛的应用场景,以下是几种典型的用法。

1. 部署检查(Deploy Check)

在 CI/CD 流水线触发后,部署完成时间不确定。使用 Loop 可以定期检查部署状态,一旦部署成功即可继续后续操作。

/loop 2m "检查部署状态:curl -s https://api.example.com/deploy/status | jq .state"

2. 服务状态轮询(Status Polling)

监控线上服务的健康状态,当服务宕机或恢复时第一时间获知。

/loop 5m "ping -c 1 api.example.com && echo OK || echo FAIL"

3. 日志监控(Log Monitoring)

持续跟踪日志文件中是否出现关键错误关键字,帮助快速定位问题。

/loop 1m "tail -n 50 /var/log/app/error.log | grep -i critical"

4. 测试结果等待

长时间运行的测试套件,使用 Loop 定期检查测试报告是否已生成。

/loop 3m "test -f test-report.xml && echo '报告已生成' || echo '等待中...'"
部署检查和服务状态轮询是 Loop 最常见的两大用途,能够显著提升运维效率。

六、工作原理

当用户在 Claude Code 中输入 /loop 命令后,系统内部的处理流程如下:

  1. 解析命令 —— 提取时间间隔参数和要执行的命令/提示词。
  2. 首次执行 —— 立即执行指定的命令或提示词,并展示输出结果。
  3. 等待间隔 —— 根据时间间隔参数启动计时器。
  4. 再次执行 —— 计时器到期后,自动重新执行相同的命令/提示词。
  5. 持续循环 —— 重复步骤 3 和 4,直到用户主动终止(如按 Ctrl+C 或输入停止指令)。

整个过程在 Claude Code 的会话上下文中进行,每次执行的输出都会显示在终端中,用户可以实时观察每次执行的结果变化。

Loop 在执行期间会占用当前的会话,因此通常建议在单独的 Claude Code 实例或分屏终端中运行 Loop 任务,以便同时进行其他操作。

七、最佳实践

为了充分发挥 Loop 技能的效率,同时避免潜在问题,建议遵循以下最佳实践。

  • 合理设置间隔 —— 根据任务的实际需要选择间隔。监控关键服务可适当缩短间隔(如 30 秒),非关键任务可延长间隔(如 10 分钟)。
  • 任务幂等性 —— 确保被循环执行的命令是幂等的(多次执行不会产生副作用),避免因重复执行导致数据异常或资源泄漏。
  • 输出可读性 —— 让每次执行的结果包含时间戳或序号,方便区分多次执行的输出。
  • 结合退出条件 —— 在命令中添加条件判断逻辑,当检测到目标状态时主动提示用户停止 Loop。
  • 避免高频请求 —— 对于 API 调用类任务,注意控制频率,防止触发限流或封禁。
# 带时间戳的输出,方便追踪每次结果 /loop 5m "echo [$(date +'%H:%M:%S')] $(curl -s -o /dev/null -w '%{http_code}' https://api.example.com/health)"
幂等性、合理间隔、可读输出是 Loop 任务设计的三大黄金法则。

八、注意事项

在使用 Loop 技能时,需要留意以下几点:

  • 会话阻塞 —— Loop 运行时会持续占用当前对话,无法同时在该会话中执行其他命令。建议在独立终端或分屏中使用。
  • 无内置停止条件 —— Loop 本身不包含条件判断逻辑,不会在某个输出出现时自动停止。如需自动停止,需要在命令中自行实现检测逻辑。
  • 网络与资源消耗 —— 频繁的 Loop 执行可能消耗网络带宽和 API 配额,请根据实际情况调整间隔。
  • 日志积累 —— 长时间运行的 Loop 会产生大量输出,建议定期清理终端缓冲区或使用 --silent 等参数减少输出量。
  • 调试困难 —— 如果 Loop 中的命令出错,排查问题需要等待下一次执行。可以在命令中增加详细的错误输出以加速调试。
如果需要对不同任务设置不同的 Loop,可以打开多个终端窗口,每个窗口运行一个独立的 Claude Code 实例并执行各自的 Loop 任务。

九、与 Schedule 技能的对比

Claude Code 还提供了另一个名为 Schedule 的技能,用于创建定时远程代理(Routine)。二者虽然都与"定时"相关,但定位和使用场景有明显区别:

  • Loop —— 在当前终端会话中运行,交互式、实时输出,适合短时监控和周期性检查。
  • Schedule —— 创建远程定时代理,按 Cron 表达式触发,即使本地终端关闭也能继续执行,适合长期自动化任务。

简单来说:Loop 适合"此时此刻我要盯着"的场景,而 Schedule 适合"我不在的时候它也能跑"的场景。两者可以配合使用,满足不同层次的定时需求。

十、核心总结

Loop 是 Claude Code 中用于周期性执行命令的轻量级定时技能,语法简洁、即开即用。

通过本文的学习,我们掌握了 Loop 技能的以下核心要点:

  • Loop 用于按固定时间间隔重复执行命令或提示词。
  • 语法格式为 /loop [间隔] [命令],间隔可选,默认 10 分钟。
  • 支持秒(s)、分钟(m)、小时(h)三种时间单位。
  • 典型使用场景包括:部署检查、服务轮询、日志监控、测试等待。
  • 工作原理为"执行 - 等待 - 再执行"的循环模式,直到用户手动停止。
  • 最佳实践要求任务幂等、间隔合理、输出带时间戳便于追踪。
  • Loop 与 Schedule 技能互补,分别对应"实时监控"与"远程定时"两种需求。

合理运用 Loop 技能,可以让日常开发中的重复性检查工作实现自动化,将精力集中在更有价值的事务上。