linux - golang应用如何启动upstart进程?

标签 linux go amazon-ec2 upstart

我正在使用 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 启动网络应用

它将进程显示为开始/运行。但是还没有开始。

我检查了 /var/log/messages 日志。它表明,

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

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

最佳答案

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

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

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

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

关于linux - golang应用如何启动upstart进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38177736/

相关文章:

linux - 如何模拟ARM未对齐的内存访问异常?

linux - 使用 sed 命令打印重复行?

java - 远程调试linux机器intellij

go - 如何从头开始制作 MP4 视频?

timer - goroutines 中的 golang 计时器阻塞

amazon-web-services - 如何设置亚马逊以将网格计算与现有 EC2 中的 Maple 软件一起使用?

linux - FreeIPA 无主机复制

go - 修改hugo中的index.html

python - aws + boto 的 eips 列表

r - 如何同时从 S3 下载多个对象?