永远使用监视文件重新启动

时间:2015-12-24 19:35:07

标签: node.js forever

给出以下目录结构。

# 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)

我已经尝试了一系列不同的路径(绝对的,相对的,相对于--watchDirectory等)的监视文件,我无法让它工作。怎么了?

1 个答案:

答案 0 :(得分:0)

根据我的理解(关于这个的文档不存在我所看到的)。 --watch函数永远检查.foreverignore文件,如果缺少该程序,程序本质上会失败并陷入永不启动模块的循环中。

在您的app目录中

创建一个名为.foreverignore的文件,并列出您不想永远观看的所有内容。这基本上告诉永远忽略对这些文件的更改而不是在它们发生任何事情时重新启动,这对于日志文件或实际上不需要重新启动模块以从中获益的事情非常有用。

以下是我实施的一个例子:

文件:

/apps/myapp/.foreverignore

内容

node_modules/*
logs/*
conf/*
htdocs/*
*.log
*.gif
*.jpg
*.html

创建后,请确保您永远重新启动以获取文件。