Forever + Nodemon一起运行

时间:2013-05-03 23:33:33

标签: node.js forever nodemon

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

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

8 个答案:

答案 0 :(得分:62)

你应该运行这样的东西

forever start -c nodemon app.coffee

答案 1 :(得分:44)

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

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

这可以确保nodemon实际退出(而不是给你“app crashed”消息),然后forever再次选择它。

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

答案 2 :(得分:14)

nodemon FAQ中有一个关于它的条目:

  

如果您正在使用nodemon   forever(也许是一个   生产环境),你可以把两者结合起来。这种方式如果   脚本崩溃,永远重启脚本,如果有文件   更改,nodemon重新启动您的脚本。有关更多详细信息,请参阅issue 30

     

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

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

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

     

要对此进行测试,您可以终止服务器.js进程   重启它。如果touch server.js nodemon将重新启动它。

     

要停止永远和nodemon监控的进程,只需调用   关注,使用我们在上面指定的uidfoo):

     

bash forever stop foo

     

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

     

请注意,我不会建议在制作中使用nodemon   环境 - 但那是因为我不想让它在没有我的情况下重启   明确指示。

答案 3 :(得分:10)

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

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

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

forever start -w my-app.js

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

答案 4 :(得分:5)

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

forever start -c nodemon app.coffee --exitcrash

答案 5 :(得分:2)

如果你需要传递参数:

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

答案 6 :(得分: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

答案 7 :(得分: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, enter rs app_1 | [nodemon] watching dir(s): *.* app_1 | [nodemon] watching extensions: js,mjs,json app_1 | [nodemon] starting节点/ app / server.js` app_1 |应用程序在端口3000上运行

`