Utilizando o upstart para tarefas não-daemon

4

Eu gostaria de ter foo do-startup-things executado na inicialização e foo do-shutdown-things executado no desligamento, onde foo é meu próprio programa.

Parece que o Upstart é um bom candidato para fazer isso, mas o Upstart parece ser projetado para uso com daemons, então executar service foo stop dá o erro stop: Unknown instance: porque o processo executado quando o trabalho de inicialização foi executado não é mais correndo.

Existe uma maneira de usar o Upstart para executar tarefas na inicialização e no desligamento sem iniciar um daemon?

    
por DanielGibbs 04.09.2014 / 23:47

1 resposta

6

Sim, é possível. Você deve definir dois trabalhos de tarefa, aqui está um exemplo:

Primeiro, crie startTaskJob.conf :

# startTaskJob - 
#
# This service print "script start" and end 
description "print script start"
start on runlevel [2345]

task
console log
script
  exec  echo "script start"
end script

Você pode testá-lo com:

sudo start startTaskJob

e a saída será salva em /var/log/upstart/startTaskJob.log

Em vez de criar stopTaskJob.conf :

# stopTaskJob - 
#
# This service print "script stop" and end 
description "print script stop"
start on runlevel [016]

task
console log
script
  exec  echo "script stop"
end script

Este script será executado toda vez que o sistema entrar em runlevel 0, 1 ou 6. No shutdown runlevel se tornará 0 e o upstart init será executado por causa de " start on runlevel [016] ".

Você pode testá-lo:

sudo start stopTaskJob

ATUALIZAÇÃO: Este é um exemplo de como fazer isso em um único arquivo.

# taskJob - 
#
# This service print environment variable 
# start on runlevel 
description "print environment variable"
start on runlevel [0123456]
task
console log
script
if [ "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" -o "$RUNLEVEL" = "6" ]; then
    exec  echo "(stopTask) $UPSTART_EVENTS - $RUNLEVEL - job $UPSTART_JOB" 
else
    exec  echo "(startTask) $UPSTART_EVENTS - $RUNLEVEL - job $UPSTART_JOB"
fi
end script

Eu testei no lubuntu 12.04 e este é /var/log/upstart/taskJob.log conteúdo após o reinício:

(stopTask) runlevel - 6 - job taskJob
(startTask) runlevel - 2 - job taskJob
    
por Lety 05.09.2014 / 00:49