我应该如何从一个暴发户脚本使用sudo?

我正在使用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) Startinginitctl 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]