pm2 --ignore-watch 不工作
pm2 --ignore-watch not working
我已经使用 pm2 有一段时间了。最近,我需要在我的 Express4 项目中添加一个自定义日志目录,名为 "actionLog"。因为它是一个用日志文件更新的目录,我不希望 pm2 在日志文件更改时重新启动应用程序,所以我希望 pm2 忽略监视该目录。将 pm2 更新到最新后,这是我使用的命令:
pm2 start app.js --watch --ignore-watch="actionLog"
我在 pm2 日志中收到以下错误流:
PM2 Error: watch ENOSPC
PM2 at exports._errnoException (util.js:746:11)
PM2 at FSWatcher.start (fs.js:1172:11)
PM2 at Object.fs.watch (fs.js:1198:11)
PM2 at createFsWatchInstance (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:37:15)
PM2 at setFsWatchListener (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:80:15)
PM2 at EventEmitter.NodeFsHandler._watchWithNodeFs (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:228:14)
PM2 at EventEmitter.NodeFsHandler._handleFile (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:255:21)
PM2 at EventEmitter.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:468:21)
PM2 at FSReqWrap.oncomplete (fs.js:95:15)
PM2 Error: watch ENOSPC
PM2 at exports._errnoException (util.js:746:11)
PM2 at FSWatcher.start (fs.js:1172:11)
PM2 at Object.fs.watch (fs.js:1198:11)
PM2 at createFsWatchInstance (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:37:15)
PM2 at setFsWatchListener (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:80:15)
PM2 at EventEmitter.NodeFsHandler._watchWithNodeFs (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:228:14)
PM2 at EventEmitter.NodeFsHandler._handleFile (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:255:21)
PM2 at EventEmitter.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:468:21)
PM2 at FSReqWrap.oncomplete (fs.js:95:15)
PM2 Error: watch ENOSPC
我也试过使用命令:
pm2 start bin/www --watch --ignore-watch="actionLog"
这也产生了同样的错误。
获得正确的 ignore-watch 参数后,我将更新用于启动 pm2 的 json 配置文件。目前,将此配置文件与 ignore-watch 一起使用也会导致错误,但我没有像上面那样详细的堆栈跟踪,而是在 pm2 日志中只看到以下内容:
PM2: 2016-02-23 04:05:34: Starting execution sequence in -fork mode- for app name:aadm id:2
PM2: 2016-02-23 04:05:34: App name:aadm id:2 online
PM2: 2016-02-23 04:05:35: Change detected on path actionLog/userAction.log for app aadm - restarting
PM2: 2016-02-23 04:05:35: Stopping app:aadm id:2
PM2: 2016-02-23 04:05:35: App name:aadm id:2 exited with code SIGTERM
PM2: 2016-02-23 04:05:35: Process with pid 5102 killed
PM2: 2016-02-23 04:05:35: Starting execution sequence in -fork mode- for app name:aadm id:2
PM2: 2016-02-23 04:05:35: App name:aadm id:2 online
我看过一些有关忽略监视问题的报告,例如:
- https://github.com/Unitech/PM2/issues/1288
- https://github.com/Unitech/PM2/issues/918
- https://github.com/Unitech/PM2/issues/1275
不幸的是,我仍然卡住了。有什么想法吗?
我认为是ignore_watch
即带下划线
事实证明,即使错误是由 ignore-watch 触发的,它们也不是由它引起的。以下命令解决了这个问题:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
我在这里找到了这个解决方案:
我也尝试了 "npm dedupe" - 按照该线程上的建议 - 但没有帮助。
您有两个选择:
- 增加系统inotify最大观看限制:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
或
- 尝试通过另外忽略
node_modules
:
来减少观看次数
pm2 start bin/www --watch --ignore-watch="actionLog node_modules"
如果您没有 sudo 权限,选项 2 适合您。
我遇到了同样的问题。
这让我发疯,然后我发现我的系统中有很多 PM2 运行 会话。
ps aux | grep pm2
之类的命令会显示所有实例 运行.
所以我手动杀死了每个实例(如上面的命令所示):
kill -9 <pid1> <pid2> <pid3> <...>
最后我重新启动了进程:
pm2 start ecosystem.config.js
然后一切都按照我的配置文件中所写的那样顺利运行(没有任何“监视”选项)。
实际问题是:为什么那些进程在我的服务器上 运行,但我无法回答这个问题。
我已经使用 pm2 有一段时间了。最近,我需要在我的 Express4 项目中添加一个自定义日志目录,名为 "actionLog"。因为它是一个用日志文件更新的目录,我不希望 pm2 在日志文件更改时重新启动应用程序,所以我希望 pm2 忽略监视该目录。将 pm2 更新到最新后,这是我使用的命令:
pm2 start app.js --watch --ignore-watch="actionLog"
我在 pm2 日志中收到以下错误流:
PM2 Error: watch ENOSPC
PM2 at exports._errnoException (util.js:746:11)
PM2 at FSWatcher.start (fs.js:1172:11)
PM2 at Object.fs.watch (fs.js:1198:11)
PM2 at createFsWatchInstance (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:37:15)
PM2 at setFsWatchListener (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:80:15)
PM2 at EventEmitter.NodeFsHandler._watchWithNodeFs (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:228:14)
PM2 at EventEmitter.NodeFsHandler._handleFile (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:255:21)
PM2 at EventEmitter.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:468:21)
PM2 at FSReqWrap.oncomplete (fs.js:95:15)
PM2 Error: watch ENOSPC
PM2 at exports._errnoException (util.js:746:11)
PM2 at FSWatcher.start (fs.js:1172:11)
PM2 at Object.fs.watch (fs.js:1198:11)
PM2 at createFsWatchInstance (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:37:15)
PM2 at setFsWatchListener (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:80:15)
PM2 at EventEmitter.NodeFsHandler._watchWithNodeFs (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:228:14)
PM2 at EventEmitter.NodeFsHandler._handleFile (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:255:21)
PM2 at EventEmitter.<anonymous> (/usr/local/lib/node_modules/pm2/node_modules/chokidar/lib/nodefs-handler.js:468:21)
PM2 at FSReqWrap.oncomplete (fs.js:95:15)
PM2 Error: watch ENOSPC
我也试过使用命令:
pm2 start bin/www --watch --ignore-watch="actionLog"
这也产生了同样的错误。
获得正确的 ignore-watch 参数后,我将更新用于启动 pm2 的 json 配置文件。目前,将此配置文件与 ignore-watch 一起使用也会导致错误,但我没有像上面那样详细的堆栈跟踪,而是在 pm2 日志中只看到以下内容:
PM2: 2016-02-23 04:05:34: Starting execution sequence in -fork mode- for app name:aadm id:2
PM2: 2016-02-23 04:05:34: App name:aadm id:2 online
PM2: 2016-02-23 04:05:35: Change detected on path actionLog/userAction.log for app aadm - restarting
PM2: 2016-02-23 04:05:35: Stopping app:aadm id:2
PM2: 2016-02-23 04:05:35: App name:aadm id:2 exited with code SIGTERM
PM2: 2016-02-23 04:05:35: Process with pid 5102 killed
PM2: 2016-02-23 04:05:35: Starting execution sequence in -fork mode- for app name:aadm id:2
PM2: 2016-02-23 04:05:35: App name:aadm id:2 online
我看过一些有关忽略监视问题的报告,例如:
- https://github.com/Unitech/PM2/issues/1288
- https://github.com/Unitech/PM2/issues/918
- https://github.com/Unitech/PM2/issues/1275
不幸的是,我仍然卡住了。有什么想法吗?
我认为是ignore_watch
即带下划线
事实证明,即使错误是由 ignore-watch 触发的,它们也不是由它引起的。以下命令解决了这个问题:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
我在这里找到了这个解决方案:
我也尝试了 "npm dedupe" - 按照该线程上的建议 - 但没有帮助。
您有两个选择:
- 增加系统inotify最大观看限制:
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
或
- 尝试通过另外忽略
node_modules
:
来减少观看次数pm2 start bin/www --watch --ignore-watch="actionLog node_modules"
如果您没有 sudo 权限,选项 2 适合您。
我遇到了同样的问题。
这让我发疯,然后我发现我的系统中有很多 PM2 运行 会话。
ps aux | grep pm2
之类的命令会显示所有实例 运行.
所以我手动杀死了每个实例(如上面的命令所示):
kill -9 <pid1> <pid2> <pid3> <...>
最后我重新启动了进程:
pm2 start ecosystem.config.js
然后一切都按照我的配置文件中所写的那样顺利运行(没有任何“监视”选项)。
实际问题是:为什么那些进程在我的服务器上 运行,但我无法回答这个问题。