pm2运行EC2使用jenkins不工作?
我在AWS EC2服务器上运行我的节点应用程序。 为了持续集成,我在EC2上安装了Jenkins,jenkins连续不断地轮询代码提交,并在提交时执行一些用脚本编写的命令。
最后的命令是
pm2启动server.js
一切工作正常,构build显示成功,但稍后当我访问网站的网站不显示。
我在节点服务器前有一个nginx服务器,它给502坏的网关
在检查我意识到节点应用程序没有运行,所以我cehcked pm2日志,发现这种情况发生 –
2016-08-12 07:53:28:[[[[PM2 / God daemon launch]]]]
2016-08-12 07:53:28:BUS系统[READY] on port /var/lib/jenkins/.pm2/pub.sock
2016-08-12 07:53:28:端口上的RPC接口[READY] /var/lib/jenkins/.pm2/rpc.sock
2016-08-12 07:53:28:在-fork模式下启动执行序列 – 对于应用程序名称:服务器ID:0
2016-08-12 07:53:28:应用程序名称:服务器ID:0在线
2016-08-12 07:53:28:pm2已经被信号死亡,转储过程列表退出之前…
2016-08-12 07:53:28:删除进程0
2016-08-12 07:53:28:停止应用程序:服务器ID:0
2016-08-12 07:53:28:App [server] id [0]和pid [25822],通过信号[SIGTERM]用代码[0]
2016-08-12 07:53:28:Proc没有定义或被杀死
2016-08-12 07:53:28:[PM2]平安退出
pm2一开始就遇害,不知道为什么,试图从npm重新安装pm2没有工作。
Ubuntu 14.04 LTS
节点v4.4.7 LTS
npm v2.15.8
pm2 v1.1.3
工作暂停,请立即需要帮助。
答案是在Dusan Bajic给出的评论中,如果有人正在使用节点应用程序与EC2上的jenkins进行持续集成,并且类似的事情发生在pm2,那么只需在启动pm2之前在脚本中添加此行。
导出BUILD_ID = dontKillMePlease
而不是
pm2启动server.js
使用
pm2重新启动server.js
server.js是你的应用程序,否则build会失败,如果在jenkins中,如果你提交并再次运行脚本,原因是pm2已经在运行server.js,并且不会停止。
来自ProcessTreeKiller
为了可靠地杀掉构build期间作业产生的进程,Jenkins包含了一些本地代码来列出这些进程并杀死它们
…
怎么运行的
ProcessTreeKiller利用了这样一个事实,即默认情况下,一个新进程获取其产卵/创build过程的环境variables的副本。
它在执行构build作业的过程中设置特定的环境variables。 稍后,当用户请求停止构build作业的进程时,它将获取计算机上运行的所有进程及其环境variables的列表,并查找最初为构build作业的进程设置的环境variables。
每个在其环境中具有该环境variables的作业都将被终止。
如果你的构build想让一个守护进程在后面…
一个方便的方法是更改Jenkins的ProcessTreeKiller正在寻找的环境variablesBUILD_ID。 这将使Jenkins认为你的守护进程不是由Jenkins构build的。 例如:
BUILD_ID=dontKillMe /usr/apache/bin/httpd