为什么我的 nodejs 应用程序永远无法在 EC2 实例上使用 Upstart 启动?

为什么我的 nodejs 应用程序永远无法在 EC2 实例上使用 Upstart 启动?

我正在尝试使用 启动一个 nodejs 应用程序foreverforever如果崩溃,只需重新启动该程序),但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

请参见:

还,

  • 删除重生直到你的工作按预期进行
  • 删除“su”
  • 删除“记录器”

最后,

在文件中查找/var/log/upstart/yourjob.log作业输出。

相关内容