# 第七章:让 Claude 长时间帮你干活 -- Daemon、Background Sessions、Schedule > 任务跑太久、需要定时执行、想让 Claude 在后台默默干活 -- 这章讲三种长时间运行的方式。 ## Daemon 是什么?跟普通对话的区别 你在终端里敲 `claude` 启动的是一个交互式 REPL 会话:你打字、Claude 回复、你继续问。关掉终端,会话就没了。Daemon 是一种不同的运行模式 -- 它在后台启动一个常驻进程(supervisor),由 supervisor 管理若干 worker 子进程,每个 worker 负责一种长时间任务。 目前 daemon 内置的 worker 类型是 `remoteControl`,它运行一个 headless bridge 循环,用于接受远程会话连接。supervisor 会监控 worker 的存活状态:如果 worker 崩溃了,supervisor 会自动重启它,使用指数退避策略(从 2 秒开始,每次翻倍,上限 120 秒)。如果 worker 在 10 秒内连续崩溃 5 次,supervisor 会把 worker "停泊"(park),不再尝试重启,避免无限重启循环。 Daemon 需要启用 `DAEMON` feature flag。启动 daemon 后,它会在 `~/.claude/daemon/` 下写一个状态文件(`remote-control.json`),记录 PID、工作目录、启动时间和 worker 类型,方便其他 CLI 进程查询状态或发送停止信号。 ## 启停 Daemon 在终端中用 `claude daemon` 命令管理 daemon 的生命周期: ```bash # 启动 daemon supervisor(默认启动 remoteControl worker) claude daemon start # 查看 daemon 和后台会话的统一状态 claude daemon status # 或者 claude daemon ps # 停止 daemon(发送 SIGTERM,超时后 SIGKILL) claude daemon stop ``` 启动时可以指定工作目录、worker 模式、并发容量等参数: ```bash claude daemon start --dir /path/to/project --spawn-mode worktree --capacity 4 --permission-mode auto-accept --sandbox ``` 也可以在 REPL 里用 `/daemon` 斜杠命令执行同样的操作: ``` /daemon status /daemon start /daemon stop /daemon bg -p "run the test suite" ``` 注意,`/daemon attach` 不能在 REPL 内使用 -- attach 是一个阻塞交互操作,需要在外部终端执行。 ## Background Sessions:让 Claude 在后台跑 Daemon 管的是 supervisor + worker 的架构,如果你只是想让 Claude 在后台跑一个任务、不想折腾 supervisor,background sessions 是更轻量的选择。 ### 启动后台会话 ```bash # 最简方式:用 -p 参数传入提示词 claude daemon bg -p "run the full test suite and report results" # 也可以用 --bg 快捷标志 claude --bg -p "check for lint errors and fix them" # 带命名参数 claude daemon bg --name nightly-audit -p "audit all TODO comments in src/" ``` 后台会话支持两种引擎: - **tmux 引擎**(macOS/Linux,需要安装 tmux):启动一个 tmux session 来运行 Claude,你可以随时 attach 进去看到交互界面。 - **detached 引擎**(Windows 或没有 tmux 的环境):进程脱离终端运行,日志写到文件,attach 时查看日志。 引擎选择是自动的:在 macOS/Linux 上优先用 tmux,如果 tmux 不可用则回退到 detached;Windows 上直接用 detached。如果使用 detached 引擎,必须带 `-p` 或 `--pipe` 参数,因为 detached 模式没有交互式终端。 ```bash # 安装 tmux(macOS) brew install tmux # 安装 tmux(Linux) sudo apt install tmux ``` 启动成功后会输出会话信息: ``` Background session started: claude-bg-a1b2c3d4 Engine: tmux Log: ~/.claude/sessions/logs/claude-bg-a1b2c3d4.log Use `claude daemon attach claude-bg-a1b2c3d4` to reconnect. Use `claude daemon status` to check status. Use `claude daemon kill claude-bg-a1b2c3d4` to stop. ``` ### 管理后台会话 ```bash # 列出所有活跃会话 claude daemon status # 输出示例: # 2 active sessions: # # PID: 12345 # Kind: bg # Engine: tmux # Session: claude-bg-a1b2c3d4 # CWD: /home/user/myproject # Name: nightly-audit # Started: 6/14/2026, 9:00:00 AM # # PID: 12346 # Kind: daemon-worker # Engine: tmux # Session: claude-bg-e5f6g7h8 # CWD: /home/user/myproject # Started: 6/14/2026, 9:00:05 AM # 重新连接到会话(tmux 引擎直接进入交互界面) claude daemon attach claude-bg-a1b2c3d4 # 查看会话日志 claude daemon logs claude-bg-a1b2c3d4 # 终止会话(SIGTERM -> 2秒等待 -> SIGKILL) claude daemon kill claude-bg-a1b2c3d4 ``` 如果没有指定目标名称,`attach` 和 `kill` 会列出可用的会话让你选择。会话的元数据(PID、session ID、名称、启动时间等)保存在 `~/.claude/sessions/` 目录下的 JSON 文件中,进程退出后对应的 JSON 文件会被自动清理。 ## Template Jobs:模板化任务 如果你经常重复执行某种结构的任务 -- 比如每天写日报、每周做代码审查 -- 可以用模板把任务的结构固定下来,之后只需 `claude job new