ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【AI】Claude Code 长时间重复任务操作手册:TaoToken 统一 Key 接入与 continue_task.sh 配置实战

【AI】Claude Code 长时间重复任务操作手册:TaoToken 统一 Key 接入与 continue_task.sh 配置实战 1. 为什么长时间重复任务总在半夜断掉如果你用 Claude Code 跑过批量任务大概率遇到过这种场景184 个场景文件每个文件要读源数据、解析元信息、生成一份说明文档单文件耗时 2 到 10 分钟整体跑完要十几个小时。你不可能一直盯着终端于是挂到后台第二天早上起来一看——跑到第 37 个就停了scenarios.list 还剩 147 行Agent 进程早就没了日志里只有一行超时退出。这不是 Claude Code 本身的问题而是「单次会话 人工触发」这个模式撑不住长任务。Claude Code 的定位是一个交互式编码 Agent它擅长在单轮对话里完成一个明确目标但它不会自己知道「还有 147 个文件没处理」。你需要一层外骨骼一个循环脚本负责喂任务一个清单文件负责记录进度一个封装脚本负责统一 API 通道一个监控脚本负责发现卡死。这套东西拆开看都不复杂难的是它们之间的协同continue_task.sh 怎么知道 Agent 真的处理完了claude.sh 里的 API 配置怎么保证每次调用都走同一条通道scenarios.list 被 sed 删行之后怎么确认删的是已完成的那一行而不是正在处理的那一行这篇就把这几个文件的骨架和验证动作完整交付出来你可以直接复制改路径就能跑。适合谁看已经在用 Claude Code 做 Agent 工作流、需要跑几十到几百个重复单元、希望配置可维护而不是每次手动重启的开发者。下面所有配置都围绕 TaoToken 统一 Key 接入展开因为长任务最怕的就是跑到一半认证失效。2. TaoToken 统一 Key 接入让长任务不掉线长任务对 API 通道的要求和短对话完全不同。短对话你手动输一次 Key跑完就完事长任务要连续调用几十上百次中间任何一次认证失败都会让整个循环卡住。所以第一步不是写脚本而是把 API 通道固定下来。TaoToken 在这里的角色是一个统一的 API 入口。你不需要在每台机器、每个脚本里分别维护不同的 Key而是用一个统一 Key 走同一个 base URL。对 continue_task.sh 这种循环调用场景来说这意味着 claude.sh 里的环境变量只需要配一次后续所有 Agent 启动都复用同一套认证。接入步骤本身很短第一步在 TaoToken 控制台创建一个 API Key。地址是 https://taotoken.net/api-keys 登录后新建 Key复制出来。建议给长任务单独建一个 Key方便后续按任务维度排查调用量。第二步确认你的 API base URL 是 https://taotoken.net/api 。注意这里不加任何查询参数就是纯 base 地址。Claude Code 会在这个地址后面拼接具体的模型端点。第三步把 Key 和 base URL 写进 claude.sh 的环境变量。这一步在下一节的配置骨架里会给出完整写法。注意不要把 Key 硬编码在 continue_task.sh 里。continue_task.sh 是循环调度层claude.sh 是 API 调用层认证信息只应该出现在 claude.sh 中。这样你换 Key 的时候只改一个文件不会影响循环逻辑。如果你还没决定用哪个模型跑长任务可以先去 https://taotoken.net/models 看一下可用模型列表再回到配置环节。模型对话页面在 https://taotoken.net/chat 可以用来快速验证 Key 是否可用。3. 可复制配置settings.json、config.toml 与三个脚本骨架这一节是全文的核心给出可以直接复制的配置。我按「配置文件 → 封装脚本 → 循环脚本 → 清单文件」的顺序排列你按顺序建文件即可。3.1 settings.json 骨架Claude Code 的项目级配置放在.claude/settings.json。长任务场景下重点是超时和权限避免 Agent 在写入阶段被权限提示卡住。{ permissions: { allow: [ Read, Write, Bash(sed:*), Bash(find:*), Bash(cat:*), Bash(python3:*) ], deny: [] }, env: { API_TIMEOUT_MS: 3000000, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC: 1 } }API_TIMEOUT_MS设成 3000000 毫秒也就是 50 分钟。单个任务单元通常 2 到 10 分钟留足余量是为了应对大文件写入。CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC关掉非必要流量减少长循环里的额外请求。3.2 config.toml 骨架如果你用 config.toml 管理模型参数可以这样写[api] base_url https://taotoken.net/api timeout_ms 3000000 [model] default claude-sonnet-4-20250514 max_tokens 8192 [task] unit_timeout_minutes 30 retry_on_failure true max_retries 2unit_timeout_minutes是单个任务单元的软超时超过这个时间监控脚本会报警。retry_on_failure控制失败后是否自动重试。3.3 claude.sh 封装脚本这是 API 调用层认证信息只在这里出现#!/bin/bash # claude.sh - Claude Code 调用封装统一走 TaoToken 通道 export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKENsk-your-taotoken-key-here export API_TIMEOUT_MS3000000 export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC1 # 调用 Claude Code$ 透传所有参数 claude --allow-dangerously-skip-permissions \ --dangerously-skip-permissions \ --verbose \ --debug-file/tmp/claude-debug.log \ $把sk-your-taotoken-key-here换成你在控制台创建的真实 Key。--allow-dangerously-skip-permissions在长循环里是必要的否则每个文件写入都可能弹权限确认循环直接卡死。3.4 continue_task.sh 循环脚本这是调度层负责读清单、喂 prompt、启动 Agent、删已处理行#!/bin/bash set -x export PROMPT$(cat PROMPT_EOF 你是一个批量文档生成 Agent。请严格按以下步骤执行只处理一个任务单元。 ## 第一步读取待处理文件 从 ~/scenarios.list 读取第一行得到 .scen 文件绝对路径。 ## 第二步读取配套源文件 读取同目录下的 Briefing.html、Intro.html 和同名 .ini 文件。 ## 第三步解析元数据 用 python3 解析 .scen 文件提取场景名称、时间、参战单位。 ## 第四步生成文档 综合以上信息生成一份结构完整的想定说明文档写入 ${SCEN_FILE}.想定说明.md。内容必须丰富禁止生成单薄版本。 ## 第五步记录日志 在 history.md 末尾追加一行处理记录包含文件名和时间戳。 ## 第六步移除已处理条目 执行 sed -i 1d ~/scenarios.list ## 重要约束 1. 只处理列表第一个文件完成后立即 exit 0 2. 遇到错误则跳过该文件并从列表移除继续下一个 3. 不要尝试处理第二个文件 PROMPT_EOF ) while [ 1 -eq 1 ]; do date if [ ! -s ~/scenarios.list ]; then echo 全部处理完毕 break fi SCEN_COUNT$(wc -l ~/scenarios.list) echo 剩余: ${SCEN_COUNT} 个 echo 当前: $(head -1 ~/scenarios.list) cd /path/to/project/ echo ${PROMPT} | bash ~/claude.sh -p sleep 30 done echo 任务完成 关键点在echo ${PROMPT} | bash ~/claude.sh -p这一行。-p是 pipe modeprompt 通过 stdin 传入Agent 执行完就退出循环进入下一轮。3.5 scenarios.list 生成清单文件用 find 生成注意用绝对路径find /path/to/docs -name *.scen -type f | sort ~/scenarios.list wc -l ~/scenarios.list如果之前已经处理过前几个文件用 grep 排除grep -v 1\. Blue Dawn\.scen\|2\. God of War\.scen ~/scenarios.list ~/scenarios_remaining.list mv ~/scenarios_remaining.list ~/scenarios.list4. 验证请求确认 Agent 真的在推进配置写完不能直接挂后台跑一夜先做一次单轮验证。这一步的目的是确认三件事API 通道通、Agent 能读到清单、处理完能删行。4.1 单轮手动触发先不要跑循环手动执行一次echo ${PROMPT} | bash ~/claude.sh -p观察输出。如果 API 通道正常你会看到 Agent 开始读取文件、解析、生成文档。如果认证失败会直接报 401 或 403这时候回去检查 claude.sh 里的 Key 和 base URL。4.2 验证清单推进单轮跑完后立刻检查清单行数wc -l ~/scenarios.list head -1 ~/scenarios.list行数应该比跑之前少 1且 head 显示的是第二个文件。如果行数没变说明 Agent 没有执行到sed -i 1d那一步可能是 prompt 里的步骤没被正确解析或者 Agent 中途退出了。4.3 验证输出产物检查生成的文档是否存在且大小合理ls -la /path/to/docs/*.想定说明.md | tail -5 find /path/to/docs -name *.想定说明.md -type f -printf %s %p\n | sort -n | head -3如果最小的文档只有几百字节说明生成质量不达标需要在 prompt 里加强「内容必须丰富」的约束或者加一个文件大小预检。4.4 启动完整循环单轮验证通过后再启动循环nohup bash ~/continue_task.sh /tmp/task_run.log 21 echo 循环 PID: $!用 nohup 是为了防止 SSH 断开导致进程退出。启动后 tail 一下日志确认在跑sleep 10 tail -20 /tmp/task_run.log5. 本篇常见错排查长任务跑起来之后问题基本集中在「卡住」和「重复」两类。下面按现象给排查动作。5.1 清单不推进但 Agent 进程还在先看 Agent 是不是在写大文件LATEST$(find /path/to/docs -name *.md -type f -printf %T %p\n | sort | tail -1) echo $LATEST如果最新文件的修改时间在几分钟内说明 Agent 正在写入等就行。如果超过 20 分钟没更新基本可以判定卡死执行重启流程。5.2 Agent 退出但清单没删行这是最危险的情况会导致重复处理。检查方法ps aux | grep claude | grep -v grep wc -l ~/scenarios.list如果 Agent 进程没了但清单行数没变说明 Agent 完成了生成但没执行删行。手动确认输出文件存在后手动删行sed -i 1d ~/scenarios.list然后重启循环。5.3 重启后出现重复文档重启前一定要确认清单和已生成文件的数量关系echo 清单剩余: $(wc -l ~/scenarios.list) echo 已生成: $(find /path/to/docs -name *.想定说明.md | wc -l)理论上「清单剩余 已生成」应该约等于原始总数。如果已生成数量明显偏多说明有重复需要先清理重复文件再继续。5.4 标准重启流程确认卡死后按这个顺序操作# 1. 记录当前状态 echo 剩余: $(wc -l ~/scenarios.list) echo 当前: $(head -1 ~/scenarios.list) # 2. 终止相关进程 pkill -f continue_task.sh pkill -f claude.*-p # 3. 重启循环 nohup bash ~/continue_task.sh /tmp/task_new.log 21 # 4. 验证启动 sleep 5 ps aux | grep continue_task | grep -v grep tail -5 /tmp/task_new.log5.5 监控脚本辅助发现卡死挂一个独立监控脚本每 10 分钟记录一次进度#!/bin/bash LOG/tmp/progress_monitor.log while true; do COUNT$(wc -l ~/scenarios.list) FIRST$(head -1 ~/scenarios.list) PID$(pgrep -f claude | head -1) TS$(date %Y-%m-%d %H:%M:%S) echo ${TS} 剩余:${COUNT} 当前:$(basename $FIRST) Agent:${PID:-无} $LOG if [ $COUNT -eq 0 ]; then echo ${TS} 全部完成 $LOG break fi sleep 600 done后台启动nohup bash monitor_progress.sh /tmp/monitor_output.log 21 监控日志里如果连续多次「剩余」数字不变且 Agent 显示「无」就是卡死了按 5.4 重启。6. 把配置固定下来长任务才可维护跑完一轮 184 个文件的任务之后我最大的感受是长任务的稳定性不来自 Claude Code 本身而来自外面那层脚本的确定性。continue_task.sh 负责「喂」claude.sh 负责「连」scenarios.list 负责「记」监控脚本负责「看」。四个角色各司其职任何一个出问题都能单独替换。TaoToken 统一 Key 在这里的价值是让 claude.sh 这一层变得极简。你不需要在循环里处理 token 刷新、不需要为每个任务单元重新认证一个 base URL 加一个 Key 就够。后续如果要换模型或者调整超时改 config.toml 就行循环逻辑完全不用动。如果你准备把这套方案用到自己的 Agent 工作流里建议先从 5 个文件的小清单开始跑确认单轮验证、清单推进、输出产物三个环节都正常再放大到几百个。配置骨架可以直接复制路径和 Key 换成你自己的即可。需要看可用模型和通道状态的话模型列表在 https://taotoken.net/models 控制台在 https://taotoken.net/console 接入文档在 https://taotoken.net/doc 。长期跑编码类 Agent 任务的话Coding Plan 页面 https://taotoken.net/coding-plan 里有针对长任务的通道说明可以对照自己的调用量选。
返回列表