我正在使用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 web-app
它将过程显示为start/running
。但它还没有开始。
我检查了/var/log/messages
日志。它显示,
init: web-app main process (18740) terminated with status 127
我无法启动这个过程。我认为chdir存在一些问题。过去两天我尝试了不同的选择。我对新贵很新,但没有运气。有人可以帮我这个吗?
答案 0 :(得分:2)
Amazon Linux Image目前使用旧版本的init(新贵0.6.5),缺少#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *optarg;
int ch;
char *indir = NULL;
while ((ch = getopt(argc, argv, "d:")) != -1) {
switch(ch) {
case 'd':
indir = optarg;
fprintf(stderr, "Optarg: %s\n", optarg);
fprintf(stderr, "Dir name: %s\n", indir);
break;
default :
fprintf(stderr, "Usage: test -d <input directory>\n");
exit(1);
}
}
if(indir == NULL){
fprintf(stderr, "Input directory required.\n");
exit(1);
}
else{
printf("Input dir: %s\n", indir);
}
return 0;
}
&amp;等新功能。嵌套脚本标签
如果exec找不到二进制文件