我正在创建一些脚本来部署基于node.js的应用程序,通过持续集成,我无法找到正确的方法来停止节点进程。
我通过start-dev.sh
脚本启动应用程序:
#!/bin/sh
scripts_dir=`dirname $0`
cd "${scripts_dir}/"..
npm start &
echo $! > app.pid
然后我希望通过以下方式阻止它:
#!/bin/sh
scripts_dir=`dirname $0`
cd "${scripts_dir}/"..
echo killing pid `cat app.pid`
kill -9 `cat app.pid`
我发现的问题是npm
此时不再运行,因此pid
对于停止进程树没有用。目前我能想到的唯一解决方法是完全跳过npm
启动,只需直接拨打node
即可?
有人能建议一个合适的方法来解决这个问题吗?在这种情况下,是否要在npm
之前推出一个好的方法?
答案 0 :(得分:1)
Forever可以为您完成流程管理。
forever start app.js
forever stop app.js
尽量避免在开发之外依赖npm start
,它只是在您和节点之间添加了一个额外的层。
答案 1 :(得分:0)
只需使用主管示例conf就像
[program:long_script]
command=/usr/bin/node SOURCE_FOLDER/EXECUTABLE_JAVASCRIPT_FILE.js
autostart=true
autorestart=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log
其中
SOURCE_FOLDER是项目的文件夹
EXECUTABLE_JAVASCRIPT_FILE要运行的文件
您可以查看帖子here