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 脚本中替换一个简单的程序可以帮助诊断错误
我正在使用 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 脚本中替换一个简单的程序可以帮助诊断错误