我正在使用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 ,为什么我不应该使用它,以及它如何build议使用--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 。
这一点,我不知道如何做得到这个工作,任何帮助,将不胜感激。
更新:我已经从这个post过来,结果是一样的。
问:“我应该如何从新贵(或任何其他types的系统启动/初始化)脚本使用sudo ?”
答:“你不应该”。
Sudo实际上是devise为交互使用的(因此you must have a tty to run sudo消息) – 这不是在非交互式启动脚本中使用的正确工具。
做你想做的事情需要一点小小的嘲笑,因为Upstart不支持作为非特权用户启动作业(但希望有一天他们会解决这个问题)。 这个问题在SuperUser上被询问和回答了 ,但是我会在这里重现它,因为它对于系统pipe理员来说同样重要:
在freenode上的#upstart频道上,正式提出这个问题是:
Upstart的未来版本将获得原生支持,但现在,您可以使用以下内容:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters]