永远使用监视文件重新启动
给定以下目录结构。
# Currently in ~/myapp/current tree . ├── tmp │ ├── restart.txt │ ├── pids ├── log │ ├── forever.log ├── myapp │ ├── myapp.js
这工作。
sudo NODE_ENV=production forever \ -c "node --use_strict" \ --append \ -f \ -l ~/myapp/current/log/forever.log \ --pidFile ~/myapp/current/tmp/pids/myapp \ --uid myapp \ myapp/myapp.js
我想能够触摸一个文件来重新启动,所以我试图使用--watch
参数。 我有一个名为restart.txt
的空文件来观看。 不幸的是,
sudo NODE_ENV=production forever \ -c "node --use_strict" \ --append \ -f \ -l ~/myapp/current/log/forever.log \ --pidFile ~/myapp/current/tmp/pids/myapp \ --uid myapp \ --watch tmp/restart.txt \ myapp/myapp.js
有了这个神秘的错误:
warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms error: Could not read .foreverignore file. error: ENOENT: no such file or directory, open '/home/deployer/myapp/releases/20151224185314/.foreverignore' error: Forever detected script exited with code: 0 events.js:141 throw er; // Unhandled 'error' event ^ Error: watch /home/deployer/myapp/releases/20151224185314/node_modules/lodash/lang/isTypedArray.js ENOSPC at exports._errnoException (util.js:855:11) at FSWatcher.start (fs.js:1313:19) at Object.fs.watch (fs.js:1341:11) at createFsWatchInstance (/usr/lib/node_modules/forever/node_modules/chokidar/lib/nodefs-handler.js:37:15) at setFsWatchListener (/usr/lib/node_modules/forever/node_modules/chokidar/lib/nodefs-handler.js:80:15) at FSWatcher.NodeFsHandler._watchWithNodeFs (/usr/lib/node_modules/forever/node_modules/chokidar/lib/nodefs-handler.js:228:14) at FSWatcher.NodeFsHandler._handleFile (/usr/lib/node_modules/forever/node_modules/chokidar/lib/nodefs-handler.js:255:21) at FSWatcher.<anonymous> (/usr/lib/node_modules/forever/node_modules/chokidar/lib/nodefs-handler.js:473:21) at FSReqWrap.oncomplete (fs.js:82:15)
我试过一些不同的path(绝对的,相对的,相对于--watchDirectory
等)的监视文件,我不能得到它的工作。 怎么了?
从我的理解(关于这个的文档是不存在的,我可以看到)。 --watch
函数永远检查一个.foreverignore文件,如果这个文件丢失了,那么程序本质上就会失败,并且会陷入一个循环而不能启动模块。
在您的应用程序目录中创build一个名为.foreverignore
的文件,并列出您不想永远观看的所有内容。 这基本上告诉永远忽略这些文件的变化,如果有什么事情发生,不要重新启动,这对于日志文件或事实并非实际需要您的模块重新启动才能从中受益。
这是从我的实施中取得的一个例子:
文件:
/apps/myapp/.foreverignore
内容
node_modules/* logs/* conf/* htdocs/* *.log *.gif *.jpg *.html
一旦创build,确保您永远重新启动文件。