upstart multiple parameters

2

Estou trabalhando em um processo iniciante e queria saber se poderia passar em vários parâmetros

my-upstart-service restart PARM1=foo PARM2=bar PARM3=hello

Aqui está o que eu tinha em mente

description "Multi Parm"

env USER=BLARG

start on startup
stop on shutdown

respawn

instance $PARM1
instance $PARM2
instance $PARM3

env P1=${PARM1}
env P2=${PARM2}
env P3=${PARM3}

script
    exec sudo -u $USER sh -c "$P1/$P2/$P3.sh"
end script

Posso fazer algo assim?

    
por Phill Pafford 30.08.2014 / 18:19

2 respostas

5

Sim, é possível definir várias variáveis env e substituí-las na linha de comando.

Por exemplo:

  description "Multi Parm"

  env USER=BLARG

  start on startup
  stop on shutdown

  env PARM1=foo
  env PARM2=bar
  env PARM3=hello

  script
     exec sudo -u $USER sh -c "/$PARM1/$USER/PARM2/$PARM3.sh"
  end script

Do que você pode começar seu serviço:

  initctl start your-service PARM1=home PARM2=bin PARM3=yourScript

Não está claro como você usaria a sub-rotina instance . Se você precisar iniciar várias instâncias do seu trabalho, poderá alterar este exemplo:

  description "Multi Parm"

  env USER=BLARG

  start on startup
  stop on shutdown

  respawn

  instance $PARM1
  script
     exec sudo -u $USER sh -c "/home/$USER/bin/$PARM1.sh"
  end script

Assim, você pode executá-lo várias vezes com um valor diferente de $ PARM1:

  initctl start your-service PARM1=my-first-script
  initctl start your-service PARM1=my-second-script

Dê uma olhada no 6.15.2 Outro Exemplo de Instância há um exemplo de como definir um trabalho worker e como executá-lo várias vezes como instância diferente do trabalho workers .

UPDATE Aqui está um exemplo testado no lubuntu 12.04.

Primeiro, defina simpleInstanceJob.conf uma tarefa que simplesmente executa seu script com determinados parâmetros. Este é um trabalho sem a sub-rotina start on e stop on , portanto, não é iniciado / interrompido pelo processo inicial do upstart.

# SimpleInstanceJob - 
#
# This service runs for ever and print number and arguments
description "Run single job instance"
instance $ENVIRONMENT/$DRIVER/$ALGORITHM
console log
respawn
script
  exec  python /home/caterina/tmp/upstart/test.py $ENVIRONMENT $DRIVER $ALGORITHM 
end script

Coloque em /etc/init e teste com:

sudo start simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar 

Use initctl para ver o trabalho de status:

initctl list | grep simpleInstanceJob

esta saída:

simpleInstanceJob (foo/bar/fooBar) start/running, process 3828

e test.py de saída serão salvos em /var/log/upstart/simpleInstanceJob-foo_bar_fooBar.log

Uso:

sudo stop simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar 

para interromper / matar " foo/bar/fooBar " instância de simpleInstanceJob .

Para executar várias instâncias de simpleInstanceJob , crie um launcherJobs.conf :

# laucherJobs - 
#
# This service runs three instance of simpleInstanceJob
# starts on runlevel.
description "laucherJobs"
start on runlevel [2345]

stop on runlevel [016]
console log

pre-start script

    start simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar
    start simpleInstanceJob ENVIRONMENT=foo1 DRIVER=bar1 ALGORITHM=fooBar1
    start simpleInstanceJob ENVIRONMENT=foo2 DRIVER=bar2 ALGORITHM=fooBar2

end script

post-stop script
    for inst in 'initctl list|grep "^simpleInstanceJob "|awk '{print }'|tr -d ')'|tr -d '(''
    do
       environment='echo $inst | awk -F "/" '{print }''
       driver='echo $inst | awk -F "/" '{print }''        
       algorithm='echo $inst | awk -F "/" '{print }''
       stop simpleInstanceJob ENVIRONMENT=$environment DRIVER=$driver ALGORITHM=$algorithm 
    done
end script

Este trabalho " master " não tem seção exec ou script principal, ele será executado (sem um pid) pela duração que o " slave " ou filhos (individual) as instâncias do job "simpleInstanceJob") são executadas.

Coloque em /etc/init e teste com:

sudo start laucherJobs

Isso iniciará três instâncias de simpleInstanceJob:

initctl list | grep Job

produzirá:

simpleInstanceJob (foo/bar/fooBar) start/running, process 3745
simpleInstanceJob (foo2/bar2/fooBar2) start/running, process 3749
simpleInstanceJob (foo1/bar1/fooBar1) start/running, process 3747
launcherJobs start/running

Finalmente, para interromper todo o processo:

sudo stop laucherJobs

Espero que isso seja útil para resolver seu problema.

    
por Lety 30.08.2014 / 22:30
1

Você pode fazer isso:

start on startup
stop on runlevel [016]

instance $PARM1/$PARM2/$PARM3

setuid BLARG

respawn
exec ${UPSTART_INSTANCE}.sh
    
por CameronNemo 03.09.2014 / 05:30