我正在尝试使用 启动一个 nodejs 应用程序forever
(forever
如果崩溃,只需重新启动该程序),但forever
它本身不会在启动时自动启动。所以我使用 upstart 来初始化forever
。
我尝试了数百种方法来实现这一点(多次尝试和错误尝试),但似乎没有什么对我有用。所以我的方案是:
- 我正在运行 Amazon Linux 实例
- 如果从命令行运行,该应用程序会运行良好(forever 和 upstart 都可以运行)
- 我正在测试
sudo start prv
这是我目前拥有的脚本(prv.conf,位于/etc/init/prv.conf
):
author "Renato Gama"
description "PRV"
start on runlevel [235]
stop on shutdown
respawn
export HOME="/home/ec2-user/prv/app"
exec su -c "/usr/bin/forever start -l forever.log -o /home/ec2-user/prv/logs/out.log -e /home/ec2-user/prv/logs/err.log --append /home/ec2-user/prv/app.js" root | logger -t PRV
事实上,我可以从命令行通过输入以下内容来启动该应用程序(并且它可以按预期工作):
cd /home/ec2-user/prv
sudo su -p (altough I am not using any specific env variable)
forever start -l f.log -o out.log -e err.log --append app.js
PS1 .: 我甚至没有在实际启动时测试过,因为它甚至不适用于sudo start prv
PS2 .: 如果我访问日志,它不会告诉我太多信息(正常退出)。部分日志位于这个要点
PS3 .: 执行后sudo start prv
我得到了这个
[ec2-user@ip-10-252-146-14 ~]$ sudo start prv
prv start/running, process 11477
但是当我尝试检查我的进程是否永远在运行时,它显示:
[ec2-user@ip-10-252-146-14 ~]$ sudo forever list
info: No forever processes running
PS4:我的应用程序绑定到端口,80
这就是为什么我需要特权用户来运行它。
编辑:我几乎确定问题是我在端口 80 上收到 EACCESS 错误
答案1
如 init(5) 所示,导出行无效(Upstart 语法不是 shell)。您需要指定:
env HOME="..."
export HOME
请参见:
- http://upstart.ubuntu.com/cookbook/#checking-how-a-service-might-react-when-run-as-a-job
- http://upstart.ubuntu.com/cookbook/#see-the-environment-a-job-runs-in
- http://upstart.ubuntu.com/cookbook/#respawn
还,
- 删除重生直到你的工作按预期进行
- 删除“su”
- 删除“记录器”
最后,
在文件中查找/var/log/upstart/yourjob.log
作业输出。