我应该如何从 upstart 脚本中使用 sudo?

我应该如何从 upstart 脚本中使用 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以及为什么我不应该使用它以及它建议如何使用--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

在这一点上,我不确定如何做才能使其工作,任何帮助都将不胜感激。

更新:我已经结束了这篇文章来自SO结果是一样的。

答案1

问:“我应该如何使用sudoupstart(或者任何其他类型的系统启动/初始化)脚本?”
答:“你不应该”。

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]

相关内容