代码部署ApplicationStart卡在挂起使用节点上

时间:2015-10-05 09:13:55

标签: node.js amazon-web-services aws-code-deploy

您好我是使用Code Deploy的新手。我正在尝试启动节点应用程序。我的根目录中有setup.sh,start.sh和app.js.

这是我的appspec.yml文件

version: 0.0
os: linux
files:
 - source: /
   destination: /
hooks:
  Install:
    - location: setup.sh
      timeout: 3600
  ApplicationStart:
    - location: start.sh
      timeout: 3600

setup.sh

yum -y install nodejs npm --enablerepo=epel
npm install

start.sh

node /app.js

app.js(只是一个基本的虚拟服务器)

var express = require("express");
var app = express();

app.get("/",function(req,res) {
    res.send("Hello world")
})


var server = app.listen(8080,function() {
    console.log("Listening at " + server.address().address + ": " + server.address().port);
});

安装步骤成功完成,但Code Deploy在执行ApplicationStart步骤时卡在挂起状态。

我很确定它是因为app.js程序不断运行,所以CodeDeploy如何知道它正在工作并继续前进?

2 个答案:

答案 0 :(得分:4)

CodeDeploy代理正在等待它启动的脚本返回退出代码并关闭stdoutstderr。要在后台启动进程并将其与宿主代理分离,以便它可以作为守护进程运行,请尝试:

node /app.js > /dev/null 2> /dev/null < /dev/null &

注意:您希望修改程序以写入日志文件而不是控制台,因为守护程序通常没有要写入的控制台(就像在此版本中一样)。 / p>

请参阅此处的官方文档:http://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html#troubleshooting-long-running-processes

答案 1 :(得分:2)

命令node /app.js不在后台运行,而是在前台运行,因此start.sh脚本永远不会完成。

有关在后台Node.js as a background service

中运行节点的详细信息,请参阅此主题