【发布时间】:2013-04-28 10:53:20
【问题描述】:
有没有办法让这两个包一起运行?
所以基本上我想要两全其美。自动运行服务器(并在出现错误时重新启动)并在发生 .js 文件更改时自动更新。
【问题讨论】:
有没有办法让这两个包一起运行?
所以基本上我想要两全其美。自动运行服务器(并在出现错误时重新启动)并在发生 .js 文件更改时自动更新。
【问题讨论】:
在 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 端口上运行
`
【讨论】:
Toxa 在正确的轨道上,cfogelberg raised 的问题是有效的,但要避免该问题,您可以执行以下操作:
forever -c "nodemon --exitcrash" app.js
这确保nodemon 实际退出(而不是给您“应用程序崩溃”消息),然后forever 再次选择它。
在forever --help 中,-c 指定要运行的命令,否则默认节点。没有 -c 会导致 cmets 中提到的错误。
【讨论】:
Cannot start forever. script /current_working_directory/nodemon does not exist. 有没有办法解决这个问题?我已经通过 npm 在本地和全局安装了 nodemon。
nodemon 不存在的错误。所以很明显它正在尝试forever start nodemon,但我不知道如何让 app.js via nodemon 启动。我想我会忍受每次文件更改都重新启动,但这似乎效率很低。
nodemon --exitcrash 标记为永远forever start -c "nodemon --exitcrash" index.js 的单个参数
在nodemon FAQ中有一条关于它的条目:
如果你使用 nodemon forever(也许在一个 生产环境),您可以将两者结合在一起。这样如果 脚本崩溃,永远重新启动脚本,如果有文件 更改,nodemon 重新启动您的脚本。详情请见issue 30。
要实现这一点,您需要在调用中添加以下内容
forever:
- 使用 forever 的
-c nodemon选项告诉 forever 运行nodemon而不是node。- 包含 nodemon
--exitcrash标志以确保 nodemon 在脚本崩溃(或意外退出)时退出。- 在请求 nodemon 停止时告诉永远使用
SIGTERM而不是SIGKILL。这确保了 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 环境 - 但那是因为我不希望它在没有我的情况下重新启动 明确的指示。
【讨论】:
如果需要传递参数:
forever start -c "nodemon --harmony" app.js --exitcrash
【讨论】:
我正在使用 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
【讨论】:
-e json,raml :)。您根本不需要-e 选项。 nodemon 默认会监视 .js 文件。
我更喜欢 Toxa 和 Jubair 建议的组合。
forever start -c nodemon app.coffee --exitcrash
【讨论】:
bin/www。所以运行forever start -c nodemon bin/www --exitcrash 终于可以正常工作了。谢谢!
我还没有找到让两个包一起运行的方法。我尝试使用@toxa 的技术,但是当我的 node.js 应用程序抛出异常时,nodemon 不会自动重新启动它,而是将错误消息输出到永久日志:
nodemon] app crashed - waiting for file changes before starting...
但是,forever 有一个-w 选项,并且以下命令实际上与我同时运行 nodemon 和永远相同:
forever start -w my-app.js
forever -w 与 nodemon 的缺点:forever 没有 --delay 选项,因此我的服务器会为每个更改的文件重新启动一次。
【讨论】:
你应该运行这样的东西
forever start -c nodemon app.coffee
【讨论】: