我有一个 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 身份运行,对吗?因此,sudo
upstart 配置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。正如在条目中所述预计节这节诗非常重要。