/etc/init/my-project.conf
我在我的 AWS 实例上使用以下脚本。
description "start and stop the go program 'my-project'"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
env USER='ec2-user'
env APP_DIR='/home/ec2-user/go/src/bitbucket.com/xxx/my-project/'
env APP_EXEC='my-project'
exec start-stop-daemon —start —chuid ${USER} —chdir ${APP_DIR} —exec ${APP_DIR}${APP_EXEC}
service my-project start
命令unrecognized service
出错。sudo start my-project
启动一个不属于我的项目的进程。当我运行sudo status my-project
命令时,我得到了my-project stop/waiting
。我找不到我做错什么了。
路径中/home/ec2-user/go/src/bitbucket.com/xxx/my-project/
有一个名为的可执行文件my-project
。因此基本上/home/ec2-user/go/src/bitbucket.com/xxx/my-project/my-project
运行该可执行文件。
答案1
首先,“service”命令适用于 /etc/init.d 中的“System V init 脚本”,而不是 /etc/init 中的 Upstart 配置。对于 Upstart,您需要使用“initctl”。相当于
$ service --status-all
对于 Upstart 来说
$ initctl list
使用以下位置的示例 upstart 配置https://gist.github.com/c4milo/940909作为指南,我能够使用以下命令运行 Upstart 配置:
#description "start and stop the go program 'my-project'"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
script
USER='ec2-user'
APP_DIR='/home/ec2-user/go/src/bitbucket.com/xxx/my-project/'
APP_EXEC='my-project'
su - ${USER} -c "exec ${APP_DIR}${APP_EXEC}"
end script
如果您对 /etc/init/my-project.conf 的更改没有生效,您可以尝试强制重新加载:
$ initctl reload-configuration
我还可以删除“env”的使用,因为它是不必要的。