Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用jenkins在EC2上运行pm2不工作?_Node.js_Jenkins_Amazon Ec2_Pm2 - Fatal编程技术网

Node.js 使用jenkins在EC2上运行pm2不工作?

Node.js 使用jenkins在EC2上运行pm2不工作?,node.js,jenkins,amazon-ec2,pm2,Node.js,Jenkins,Amazon Ec2,Pm2,我正在AWS EC2服务器上运行我的节点应用程序。 对于持续集成,我安装了Jenkins,在EC2上,Jenkins连续轮询代码提交,当提交发生时,执行脚本中编写的一些命令 最后一个命令是 pm2启动服务器.js 一切正常,构建显示成功,但稍后当我访问该URL时,该站点不会显示 我在节点服务器前面有一个nginx服务器,它提供 502坏网关 检查时,我意识到节点应用程序没有运行,因此我查看了pm2日志,发现发生了这种情况- 2016-08-12 07:53:28:[[[PM2/上帝守护进程启动]

我正在AWS EC2服务器上运行我的节点应用程序。 对于持续集成,我安装了Jenkins,在EC2上,Jenkins连续轮询代码提交,当提交发生时,执行脚本中编写的一些命令

最后一个命令是

pm2启动服务器.js

一切正常,构建显示成功,但稍后当我访问该URL时,该站点不会显示

我在节点服务器前面有一个nginx服务器,它提供 502坏网关

检查时,我意识到节点应用程序没有运行,因此我查看了pm2日志,发现发生了这种情况-

2016-08-12 07:53:28:[[[PM2/上帝守护进程启动]]]

2016-08-12 07:53:28:port/var/lib/jenkins/.pm2/pub.sock上的总线系统[准备就绪]

2016-08-12 07:53:28:端口/var/lib/jenkins/.pm2/RPC.sock上的RPC接口[就绪]

2016-08-12 07:53:28:在-分叉模式下启动执行序列-对于应用程序名称:服务器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: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之前在脚本中添加这一行

导出生成\u ID=dontKillMePlease

而不是

pm2启动服务器.js

使用

pm2重启服务器.js


server.js是您的应用程序,否则在jenkins中,如果您提交并再次运行脚本,构建将失败,因为pm2已经在运行server.js并且不会停止。

答案在Dusan Bajic给出的注释中,如果有人在EC2上使用节点应用程序与jenkins进行持续集成,pm2也会发生类似的情况,只需在启动pm2之前在脚本中添加这一行即可

导出生成\u ID=dontKillMePlease

而不是

pm2启动服务器.js

使用

pm2重启服务器.js

如果在jenkins中提交并再次运行脚本,则作为您的应用程序的server.js或其他构建将失败,因为pm2已经在运行server.js并且不会停止。

From

为了在构建过程中可靠地杀死作业生成的进程,Jenkins 包含一些本机代码来列出这些进程并杀死它们

工作原理

ProcessTreeKiller利用了以下事实: 默认情况下,新进程将获取其 生成/创建过程

它在执行过程中设置特定的环境变量 建造工作。稍后,当用户请求停止生成作业的 进程它获取计算机上运行的所有进程的列表,以及 它们的环境变量,并查找环境变量 它最初为构建作业的流程设置

然后,在其环境中包含该环境变量的每个作业 终止

如果您的构建想要留下一个后台进程运行

实现这一点的一个方便方法是更改环境变量 Jenkins的ProcessTreeKiller正在寻找的构建ID。这将 让Jenkins假设你的守护进程不是由Jenkins产生的 建筑例如:

BUILD_ID=dontKillMe/usr/apache/bin/httpd

为了在构建过程中可靠地杀死作业生成的进程,Jenkins 包含一些本机代码来列出这些进程并杀死它们

工作原理

ProcessTreeKiller利用了以下事实: 默认情况下,新进程将获取其 生成/创建过程

它在执行过程中设置特定的环境变量 建造工作。稍后,当用户请求停止生成作业的 进程它获取计算机上运行的所有进程的列表,以及 它们的环境变量,并查找环境变量 它最初为构建作业的流程设置

然后,在其环境中包含该环境变量的每个作业 终止

如果您的构建想要留下一个后台进程运行

实现这一点的一个方便方法是更改环境变量 Jenkins的ProcessTreeKiller正在寻找的构建ID。这将 让Jenkins假设你的守护进程不是由Jenkins产生的 建筑例如:

BUILD_ID=dontKillMe/usr/apac he/bin/httpd


如果您在shell步骤的开始部分很好地询问它是否有帮助:export BUILD\u ID=dontkillme请:它起作用了。为什么会发生这样的事呢。非常感谢。如果您在shell步骤开始时问得很好,会有帮助吗:export BUILD\u ID=dontkillme请:它成功了。为什么会发生这样的事呢。非常感谢。嗨。我也有同样的问题,我的jenkins shell只是一个要执行的命令。/deploy.sh。我尝试了BUILD_ID=dontKillMe./deploy.sh和BUILD_ID=dontKillMePlease./deploy.sh,但仍然无法解决502坏网关的问题。我在构建后检查了PM2日志,但没有发现PM2被信号杀死。。。。你知道吗?它对我有用,但我必须去Jenkins项目配置,在我的构建步骤execute shell中,我必须编写build_ID=dontKillMe./build.sh。不要在build.sh脚本本身中使用它-我想我需要在启动被杀死的守护进程的行上放置build_ID,但实际上必须在Jenkins配置中的整个脚本上放置build_ID。虽然这很奇怪,但出口对我不起作用——也许在没有“请”的情况下使用它会起作用。我也有同样的问题,我的jenkins shell只是一个要执行的命令。/deploy.sh。我尝试了BUILD_ID=dontKillMe./deploy.sh和BUILD_ID=dontKillMePlease./deploy.sh,但仍然无法解决502坏网关的问题。我在构建后检查了PM2日志,但没有发现PM2被信号杀死。。。。你知道吗?它对我有用,但我必须去Jenkins项目配置,在我的构建步骤execute shell中,我必须编写build_ID=dontKillMe./build.sh。不要在build.sh脚本本身中使用它-我想我需要在启动被杀死的守护进程的行上放置build_ID,但实际上必须在Jenkins配置中的整个脚本上放置build_ID。虽然这很奇怪,但导出对我不起作用——也许在没有“请”的情况下使用它会起作用