Forever + Nodemon一起运行

Pat*_*ann 48 node.js forever nodemon

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

所以基本上我想要从两个世界中获得最佳.自动运行服务器(并在出现错误时重新启动),并在发生.js文件更改时自动更新.

小智 64

你应该运行这样的东西

forever start -c nodemon app.coffee
Run Code Online (Sandbox Code Playgroud)

  • 你应该看到cfogelberg对这个问题的答案,因为这个解决方案存在缺陷.我的回答也有解决方法. (7认同)

Jub*_*air 48

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

forever -c "nodemon --exitcrash" app.js
Run Code Online (Sandbox Code Playgroud)

这确保nodemon实际退出(而不是给你"app crashed"消息)然后forever再次拾取它.

forever --help-c指定要运行的命令,否则它默认为节点.如果没有-c,则会导致在此答案的注释中提及错误.

  • 我不得不把引号标记为`nodemon --exitcrash`作为永远`永远开始-c"nodemon --exitcrash"index.js`的单个参数. (13认同)

mik*_*1aj 15

nodemonFAQ中有关于它的条目:

如果您永远使用nodemon (可能在生产环境中),则可以将两者结合使用.这样,如果脚本崩溃,则永远重新启动脚本,如果有文件更改,nodemon将重新启动脚本.有关更多详细信息,请参阅问题30.

要实现此目的,您需要在调用时添加以下内容 forever:

  • 使用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 - 但那是因为如果没有我的显式指令,我不希望它重新启动.


cfo*_*erg 10

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

nodemon] app crashed - waiting for file changes before starting...
Run Code Online (Sandbox Code Playgroud)

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

forever start -w my-app.js
Run Code Online (Sandbox Code Playgroud)

的缺点forever -wnodemon:forever没有一个--delay的选择,所以我的服务器获取用于改变每个文件重新启动一次.


bcb*_*ian 5

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

forever start -c nodemon app.coffee --exitcrash
Run Code Online (Sandbox Code Playgroud)