有没有办法让这两个软件包同时运行?
基本上,我想要两全其美。自动运行服务器(并在出现错误时重新启动),同时在.js文件发生更改时进行自动更新。
你应该运行类似于以下的命令
forever start -c nodemon app.coffee
Toxa 步入了正确的轨道,cfogelberg 提出的问题是合理的,但为了避免这个问题您可以执行以下操作:
forever -c "nodemon --exitcrash" app.js
这样做可以确保nodemon
实际退出(而不是给出“应用程序崩溃”的消息),然后forever
再次接管。
在forever --help
中,-c
指定要运行的命令,否则它默认使用node。没有-c会导致评论中提到的错误。
Cannot start forever. script /current_working_directory/nodemon does not exist.
有什么办法可以修复这个问题吗?我已经通过npm在本地和全局安装了nodemon。 - Adonis K. Kakoulidisnodemon --exitcrash
дҢњдёғforeverзљ„еҚ•дёҒеЏ‚ж•°пәЊд»ӨдңүдҢүз”Ёд»Өдё‹е‘Ң令еђҮеЉЁпәљforever start -c "nodemon --exitcrash" index.js
гЂ‚ - Masadow在nodemon
FAQ中有相关内容:
如果您在生产环境中使用forever,可以将nodemon与其结合使用。这样,如果脚本崩溃,forever会重新启动脚本,如果有文件更改,nodemon会重新启动脚本。更多详情请参见30号问题。
要实现此目的,您需要在调用
forever
时添加以下参数:
- 使用forever的
-c nodemon
选项,告诉forever运行nodemon
而不是node
。- 包括nodemon的
--exitcrash
标志,以确保nodemon在脚本崩溃(或意外退出)时退出。- 告诉forever在请求nodemon停止时使用
SIGTERM
而不是SIGKILL
。这确保nodemon可以干净地停止监视的node进程。- 可选地添加
--uid
参数,为您的进程添加唯一名称。在此示例中,uid设置为foo
。
bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js
要测试此内容,您可以杀死server.js进程,forever会重新启动它。如果您执行
touch server.js
,nodemon将重新启动它。要停止由forever和nodemon监视的进程,只需调用以下命令,使用我们分配的
uid
(foo
):
bash forever stop foo
这将停止nodemon和它正在监视的node进程。
请注意,我不建议在生产环境中使用nodemon,因为我不希望它在没有我的显式指令下重新启动。
我还没有找到同时运行这两个软件包的方法。我尝试过@toxa的技巧,但当我的node.js应用程序抛出异常时,nodemon不会自动重新启动它,而是将错误消息输出到forever日志:
nodemon] app crashed - waiting for file changes before starting...
然而,Forever 有一个 -w
选项,以下命令与同时运行 nodemon 和 Forever 的效果相同:
forever start -w my-app.js
forever -w
相较于nodemon
的缺点是: forever
没有--delay选项,所以每次更改文件时,我的服务器都会重新启动一次。
forever start -c nodemon app.coffee --exitcrash
bin/www
。因此,运行forever start -c nodemon bin/www --exitcrash
终于让它工作了。谢谢! - Jens Bodal如果您需要传递参数:
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文件。 - Julia Anne Jacobs在 package.json 中使用单引号,将 nodemon --existcrash 作为单个参数。
"start": "forever -c 'nodemon --exitcrash' server.js"
输出:
app_1 | [nodemon] 应用程序已崩溃
app_1 | 错误:Forever 检测到脚本退出代码为:1
app_1 | 错误:脚本重启尝试 #1
app_1 | [nodemon] 1.19.4
app_1 | [nodemon] 可以随时重新启动,请输入
rs
app_1 | [nodemon] 正在监视目录:*.*
app_1 | [nodemon] 正在监视扩展名:js、mjs、json
app_1 | [nodemon] 启动
node /app/server.js`
app_1 | 应用正在端口 3000 上运行
`
"start": "firever -c \"nodemon --exitcrash\" <main>.js"