我正在使用 upstart 在 Amazon Linux AMI EC2 实例上运行我的 node.js 应用程序。我在运行它时遇到了一些问题,总结如下。
在我的脚本中我有这样一行:
exec sudo -u www /usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1
运行时,作业从未通过stop/waiting
,当我打开时,log-priority debug
我看到了这一行:
sudo: sorry, you must have a tty to run sudo
我最终这个帖子谈论visudo
以及为什么我不应该使用它以及它建议如何使用--session-command
。所以我把这行改成了:
exec su --session-command="/usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1" www
日志现在说(sys) Starting
但initctl status foo
仍然说foo stop/waiting
。
在这一点上,我不确定如何做才能使其工作,任何帮助都将不胜感激。
更新:我已经结束了这篇文章来自SO结果是一样的。
答案1
问:“我应该如何使用sudo
upstart(或者任何其他类型的系统启动/初始化)脚本?”
答:“你不应该”。
Sudo 实际上是为交互使用而设计的(因此出现此you must have a tty to run sudo
消息)——它不是在非交互式启动脚本中使用的正确工具。
要想做你想做的事,需要一点技巧,因为 Upstart 不支持以非特权用户身份启动作业(目前还不支持——希望有一天他们会解决这个问题)。问题是在 SuperUser 上提问并回答,但我会在这里重现它,因为它对系统管理员同样有价值:
在 freenode 上的 #upstart 频道询问,官方对此事的看法是:
Upstart 的未来版本将会提供原生支持,但是现在,您可以使用以下命令:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters]