有没有办法让这两个包一起运行?
所以基本上我想要两全其美。自动运行服务器(并在出现错误时重新启动)并在发生 .js 文件更改时自动更新。
你应该运行这样的东西
forever start -c nodemon app.coffee
Toxa 在正确的轨道上,cfogelberg 提出的问题是有效的,但要避免该问题,您可以执行以下操作:
forever -c "nodemon --exitcrash" app.js
这可以确保nodemon
实际退出(而不是给你“应用程序崩溃”的消息)然后forever
再次拿起它。
在forever --help
此-c
指定要运行的命令,否则默认为节点。如果没有 -c 会导致此答案的评论中提到的错误。
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.js
nodemon 将重新启动它。要停止由 forever 和 nodemon 监控的进程,只需使用
uid
我们在上面分配的 (foo
) 调用以下命令:
bash forever stop foo
这将停止 nodemon 和它正在监视的节点进程。
请注意,我不建议在生产环境中使用 nodemon - 但那是因为我不希望它在没有我明确指示的情况下重新启动。
我还没有找到让两个包一起运行的方法。我尝试使用@toxa 的技术,但是当我的 node.js 应用程序抛出异常时,nodemon 不会自动重新启动它,而是将错误消息输出到永久日志:
nodemon] app crashed - waiting for file changes before starting...
但是,forever 有一个-w
选项,以下命令实际上与我同时运行 nodemon 和永远相同:
forever start -w my-app.js
forever -w
vs的缺点nodemon
:forever
没有 --delay 选项,因此我的服务器会为每个更改的文件重新启动一次。
我更喜欢 Toxa 和 Jubair 建议的组合。
forever start -c nodemon app.coffee --exitcrash
如果您需要传递参数:
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
在 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
node /app/server.js` app_1 | 应用程序在端口 3000 上运行
`