【问题标题】:How to start the upstart process for golang application?如何启动 golang 应用程序的 upstart 流程?
【发布时间】:2016-07-04 05:54:25
【问题描述】:

我正在使用 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/ 文件夹中。这里是 web-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 存在一些问题。在过去的两天里,我尝试了不同的选择。而且我对新贵还很陌生,但没有运气。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 错字rullevel是真的吗?
  • 你到底想执行什么? app 不是目录吗?看看这个问题stackoverflow.com/questions/14692843/…
  • 啊,这是一个错字。谢谢你找到那个。我解决了这个问题并尝试开始。但仍然面临同样的问题。
  • @Lital - 当我构建应用程序时,它会生成名为 app 的二进制文件。 [我认为这是 golang 特有的]
  • terminated with status 1 建议新贵正在运行您的应用程序,好!该应用程序正在崩溃。要验证应用程序现在是否存在问题,请暂时将exec ./app 替换为您知道正在运行的基本程序,例如exec sleep 2。重新启动作业应该会导致 /var/log/messages 包含多个 web-app main process ended, respawning 行。

标签: linux go amazon-ec2 upstart


【解决方案1】:

OP 在修复了一些问题后最终解决了。请参阅 cmets,尤其是:

  • upstart 可能无法识别环境变量
  • Amazon Linux Image 当前使用旧版本的 init(新贵 0.6.5),缺少 console log 和嵌套脚本标签等新功能

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    相关资源
    最近更新 更多