Upstart - Bluepill não inicia sem sudo

1

Eu tenho um serviço iniciante para iniciar o bluepill (gem Ruby para monitorar processos). A configuração do upstart está abaixo.

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

Eu quero que o bluepill seja iniciado como root.

Todas as configurações do upstart são executadas como root, quando a máquina inicializa, certo? Portanto, nenhum sudo deve ser necessário na linha exec da configuração inicial.

O script acima funciona bem, e o bluepill inicia na inicialização do sistema. Mas se eu remover o sudo na linha exec , o bluepill não inicia na inicialização do sistema. Olhando para o log, parece que o bluepill está começando como um usuário não privilegiado e, portanto, falha.

Alguém pode explicar por quê?

Eu não quero que sudo seja usado, porque, quando eu dou respawn , o upstart rastreia o PID do processo sudo e não o PID do processo atual do bluepill.

    
por Anjan 16.07.2013 / 10:50

1 resposta

1

Eu duvido seriamente que seu trabalho esteja começando corretamente. Provavelmente você encontraria na /var/log/upstart/yourjobconfigname.log a seguinte linha:

  

sudo: desculpe, você deve ter um tty para rodar o sudo

O sudo deve ser usado de forma interativa. Consulte Como devo usar o sudo de um script inicial? para detalhes.

Você deve reconsiderar seu design. Será muito melhor criar um usuário dedicado do sistema que execute seu processo de trabalho e aplique as permissões necessárias. Em sua configuração de trabalho você precisaria adicionar setuid e talvez setgid estrofes.

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

bluepill é adicionado ao usuário do sistema designado. Veja adduser para detalhes.

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

Baseado nos os tickets mencionados no comentário adicionando expect daemon stanza pode ser útil. Ao iniciar o processo do bluepill, ele é iniciado como daemon haverá dois garfos. Sem expect daemon stanza, o Upstart não pode rastrear os PIDs corretamente. Como dito na entrada em espere stanza Esta estrofe é extremamente importante .

    
por Goran Miskovic 17.07.2013 / 14:13