Qual é a maneira correta de iniciar um script do Ubuntu Upstart a partir de outro script Upstart?

1

Eu tenho três scripts do Ubuntu Upstart:

  • browser executa uma instância do firefox como um usuário sem privilégios
  • browsers começa quando screen é iniciado e lança
    • browser PORT=1
    • browser PORT=2
    • browser PORT=3
  • screen inicia um servidor Xvfb

A cadeia é:

  1. screen começa nos runlevels 2, 3, 4, 5
  2. browsers está configurado para start on started screen e para stop on stopping screen
  3. cada instância browser PORT=? será stop on stopping browsers e será iniciada por browsers

Problema

screen começa bem, mas não inicia browsers (ou ocorre e browsers falha ao iniciar browser PORT=? ).

Se eu sudo start browser PORT=1 tudo funcionar bem, enquanto sudo start browsers nem sequer se inicia.

Código

#screen.conf
env DISPLAY=:99
env USER=worker

start on runlevel [2345]
stop on runlevel [!2345]

respawn

script 
        su ${USER} -c "/usr/bin/Xvfb ${DISPLAY}"
end script

#browsers.conf
start on started screen
stop on runlevel [!2345] or stopping screen

respawn

expect fork #the following "start browser ..." do fork

script
       start browser PORT=4242
       start browser PORT=4243
       start browser PORT=4244
       start browser PORT=4245
end script

#browser.conf
instance $PORT

stop on runlevel [!2345]
stop on stopping browsers or stopping screen

respawn

script 
        su ${USER} -c "/usr/bin/firefox -no-remote -P ${PORT} --display ${DISPLAY}"
end script

UPDATE (21/10/2010): o código (modificado) acima funciona agora. No entanto, quando eu precisar de stop browsers , todas as instâncias de browser PORT=? serão encerradas corretamente, enquanto os "navegadores" ficarão presos.

Como resolvo esse outro problema?

    
por phretor 19.10.2010 / 12:03

1 resposta

1

O Lucid vem com a versão inicial v0.6.x, o que significa que você não pode ter várias linhas "stop on" ou "start on". Você precisa combinar as condições com and , or & parênteses.

Você pode ler a sintaxe de descrição do trabalho na página de manual do init (5) ( disponível online ou execute man 5 init em um terminal.

    
por 20.10.2010 / 21:55