Upstart - 如果没有 sudo,Bluepill 无法启动

Upstart - 如果没有 sudo,Bluepill 无法启动

我有一个 upstart 服务来启动 bluepill(用于监控进程的 Ruby gem)。upstart 配置如下。

description "Start up the bluepill service"

start on runlevel [2]
stop on runlevel [016]

exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill

我希望 bluepill 以 root 身份启动。

机器启动时,所有 upstart 配置都以 root 身份运行,对吗?因此,sudoupstart 配置exec行中不需要。

上述脚本运行正常,bluepill会在系统启动时启动。但如果我删除该行sudo上的exec,bluepill不会在系统启动时启动。查看日志,似乎bluepill是以非特权用户身份启动的,因此失败。

有人能解释一下原因吗?

我不想sudo被使用,因为当我给出时respawn,upstart 会跟踪进程的 PIDsudo而不是实际 bluepill 进程的 PID。

答案1

我非常怀疑你的工作是否正确启动。你很可能会在 /var/log/upstart/yourjobconfigname.log 中找到以下行:

sudo:抱歉,您必须有一个 tty 才能运行 sudo

sudo 旨在以交互方式使用。请参阅我应该如何从 upstart 脚本中使用 sudo?了解详情。

您应该重新考虑您的设计。最好创建专用的系统用户来运行您的作业流程并应用所需的权限。在您的作业配置中,您需要添加设置用户标识也许设置组ID节。

description "Start up the bluepill service"

start on runlevel [2]
stop on runlevel [016]

setuid bluepill
setgid bluepill
exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill

蓝色药丸被添加为指定系统用户。请参阅添加用户了解详情。

sudo adduser --system --group --no-create-home bluepill

基于提到的门票在注释中添加expect daemon节可能会有所帮助。启动 bluepill 进程时,例如作为守护进程启动,将有两个分支。如果没有expect daemon节,Upstart 无法正确跟踪 PID。正如在条目中所述预计这节诗非常重要

相关内容