golang应用如何启动upstart进程?

How to start the upstart process for golang application?

我正在使用 upstart 来启动我的 golang 应用程序。我有这样的应用程序文件夹结构,

   web-app/
         /app
             main.go

我构建的应用程序如下,

$cd /home/ec2-user/go/src/github.com/dineshappavoo/web-app/app/
$go build ./...

它生成了二进制文件app

并将 web-app.conf 放在 /etc/init/ 文件夹中。这里是网页-app.conf内容,

#Web app upstart script
description "start and stop web app"

start on (net-device-up
and local-filesystems
and runlevel [2345])

stop on runlevel [016]

respawn
respawn limit 5 30

console output

script
    chdir /home/ec2-user/go/src/github.com/dineshappavoo/web-app/app
    exec ./app
end script

当我尝试 sudo initctl list 时,它将进程列为 stop/waiting。我试着开始这个过程

$sudo initctl 启动网络应用程序

显示过程为start/running。但是没有启动。

我查看了 /var/log/messages 日志。它显示,

init: web-app main process (18740) terminated with status 127

我无法启动进程。我认为 chdir 有一些问题。过去两天我尝试了不同的选择。而且我对暴发户还很陌生,但运气不好。有人可以帮我解决这个问题吗?

OP 在修复了一些问题后最终解决了。查看评论,特别是:

  • 暴发户可能无法识别环境变量
  • Amazon Linux 图像目前使用旧版本的 init (upstart 0.6.5),缺少更新的功能,例如 console log 和嵌套脚本标签

  • 如果 exec 找不到二进制文件,可能会出现状态 127

  • 如果二进制文件运行失败,可能会出现状态 1
  • 在 upstart 脚本中替换一个简单的程序可以帮助诊断错误