web-dev-qa-db-fra.com

plusieurs paramètres par défaut

Donc, je travaille sur un processus de démarrage et je voulais savoir si je pouvais passer dans plusieurs paramètres

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

Voici un peu ce que j'avais à l'esprit

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

Puis-je faire quelque chose comme ça?

2
Phill Pafford

Oui, il est possible de définir plusieurs variables env et de les remplacer à partir de la ligne de commande.

Par exemple:

  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

Alors vous pouvez commencer votre service:

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

Je ne vois pas comment vous utiliseriez la strophe instance . Si vous devez démarrer plusieurs instances de votre travail, vous pouvez modifier cet exemple:

  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

Vous pouvez donc l'exécuter plusieurs fois avec une valeur différente de $ PARM1:

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

Jetez un coup d'œil à 6.15.2 Exemple d'une autre instance il existe un exemple sur la manière de définir un travail worker et de l'exécuter plusieurs fois en tant qu'instance différente de workers.

UPDATE Voici un exemple testé sur lubuntu 12.04.

Commencez par définir simpleInstanceJob.conf un travail qui exécute simplement votre script avec des paramètres donnés. Il s'agit d'un travail sans start on et stop on, il ne s'agit donc pas d'un processus démarré/arrêté par un processus initial.

# 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

Mettez-le dans /etc/init et testez-le avec:

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

Utilisez initctl pour afficher le travail de statut:

initctl list | grep simpleInstanceJob

ceci produira:

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

et test.py la sortie sera enregistrée dans /var/log/upstart/simpleInstanceJob-foo_bar_fooBar.log

Utilisation:

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

arrêter/tuer "foo/bar/fooBar" instance de simpleInstanceJob.

Pour exécuter plusieurs instances de simpleInstanceJob, créez un 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 $2}'|tr -d ')'|tr -d '('`
    do
       environment=`echo $inst | awk -F "/" '{print $1}'`
       driver=`echo $inst | awk -F "/" '{print $2}'`        
       algorithm=`echo $inst | awk -F "/" '{print $3}'`
       stop simpleInstanceJob ENVIRONMENT=$environment DRIVER=$driver ALGORITHM=$algorithm 
    done
end script

Ce travail " maître " n’a pas de section exécutable ni de script; il s’exécutera (sans pid) pendant la durée " des instances de travail esclaves "ou enfants (individuelles" simpleInstanceJob ") sont exécutées.

Mettez-le dans /etc/init et testez-le avec:

Sudo start laucherJobs

Cela démarrera trois instances de simpleInstanceJob:

initctl list | grep Job

affichera:

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

Enfin pour arrêter tout processus:

Sudo stop laucherJobs

J'espère que cela vous aidera à résoudre votre problème.

5
Lety

Tu peux le faire:

start on startup
stop on runlevel [016]

instance $PARM1/$PARM2/$PARM3

setuid BLARG

respawn
exec ${UPSTART_INSTANCE}.sh
1
CameronNemo