52

有没有办法让这两个包一起运行?

所以基本上我想要两全其美。自动运行服务器(并在出现错误时重新启动)并在发生 .js 文件更改时自动更新。

4

8 回答 8

64

你应该运行这样的东西

forever start -c nodemon app.coffee
于 2013-05-31T13:33:30.037 回答
52

Toxa 在正确的轨道上,cfogelberg 提出的问题是有效的,但要避免该问题,您可以执行以下操作:

forever -c "nodemon --exitcrash" app.js

这可以确保nodemon实际退出(而不是给你“应用程序崩溃”的消息)然后forever再次拿起它。

forever --help-c指定要运行的命令,否则默认为节点。如果没有 -c 会导致此答案的评论中提到的错误。

于 2013-11-30T23:34:56.590 回答
15

nodemon常见问题解答中有一个关于它的条目:

如果您将nodemon 与 forever一起使用(可能在生产环境中),您可以将两者结合在一起。这样,如果脚本崩溃,将永远重新启动脚本,并且如果有文件更改,nodemon 会重新启动您的脚本。有关详细信息,请参阅第 30 期

为此,您需要在调用中添加以下内容 forever

  • 使用永远的-c nodemon选项来告诉永远运行nodemon而不是node.
  • 包含 nodemon--exitcrash标志以确保在脚本崩溃(或意外退出)时 nodemon 退出。
  • 告诉永远使用SIGTERM而不是SIGKILL在请求 nodemon 停止时使用。这确保了 nodemon 可以干净地停止被监视的节点进程。
  • (可选)添加--uid参数,为您的流程添加唯一名称。在示例中,uid 设置为foo.

bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js

要对此进行测试,您可以终止 server.js 进程并永远重新启动它。如果你touch server.jsnodemon 将重新启动它。

要停止由 forever 和 nodemon 监控的进程,只需使用uid我们在上面分配的 ( foo) 调用以下命令:

bash forever stop foo

这将停止 nodemon 和它正在监视的节点进程。

请注意,我建议在生产环境中使用 nodemon - 但那是因为我不希望它在没有我明确指示的情况下重新启动。

于 2015-05-26T12:00:48.693 回答
10

我还没有找到让两个包一起运行的方法。我尝试使用@toxa 的技术,但是当我的 node.js 应用程序抛出异常时,nodemon 不会自动重新启动它,而是将错误消息输出到永久日志:

nodemon] app crashed - waiting for file changes before starting...

但是,forever 有一个-w选项,以下命令实际上与我同时运行 nodemon 和永远相同:

forever start -w my-app.js

forever -wvs的缺点nodemon:forever没有 --delay 选项,因此我的服务器会为每个更改的文件重新启动一次。

于 2013-10-19T22:52:29.200 回答
5

我更喜欢 Toxa 和 Jubair 建议的组合。

forever start -c nodemon app.coffee --exitcrash
于 2015-01-14T19:38:06.753 回答
2

如果您需要传递参数:

forever start -c "nodemon --harmony" app.js --exitcrash
于 2015-04-28T14:39:39.950 回答
1

我正在使用forever-service。. .

这对我有用。它执行以下操作:每次修改应用程序 dist/assets 文件夹中的 json 或 raml 文件时,等待 10 秒,然后重新启动节点应用程序(server.js 脚本):

$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"

然后我可以运行:

$ service raml start|stop|restart|status

我还可以使用 chkconfig 实用程序在服务器重新启动时启动服务:

$ chkconfig --add raml
$ chkconfig raml on
于 2015-04-15T20:39:39.630 回答
0

在 package.json 中使用时,使用单引号将 nodemon --existcrash 作为单个参数。 "start": "forever -c 'nodemon --exitcrash' server.js"

输出: app_1 | [nodemon] app crashed app_1 | error: Forever detected script exited with code: 1 app_1 | error: Script restart attempt #1 app_1 | [nodemon] 1.19.4 app_1 | [nodemon] to restart at any time, enterrs app_1 | [nodemon] watching dir(s): *.* app_1 | [nodemon] watching extensions: js,mjs,json app_1 | [nodemon] startingnode /app/server.js` app_1 | 应用程序在端口 3000 上运行

`

于 2019-12-08T06:15:47.207 回答