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?
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.
Tu peux le faire:
start on startup
stop on runlevel [016]
instance $PARM1/$PARM2/$PARM3
setuid BLARG
respawn
exec ${UPSTART_INSTANCE}.sh