だから私は新興プロセスに取り組んでおり、複数のパラメータを渡すことができるかどうかを知りたい
my-upstart-service restart PARM1=foo PARM2=bar PARM3=hello
ここに私が念頭に置いていたものがあります
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
このようなことはできますか?
はい、複数のenv
変数を定義し、コマンドラインから上書きすることもできます。
例えば:
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
サービスを開始できるより:
initctl start your-service PARM1=home PARM2=bin PARM3=yourScript
instance スタンザをどのように使用するかはわかりません。ジョブの複数のインスタンスを開始する必要がある場合、この例を変更できます。
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
したがって、異なる値の$ PARM1で複数回実行できます。
initctl start your-service PARM1=my-first-script
initctl start your-service PARM1=my-second-script
6.15.2別のインスタンスの例 をご覧ください。worker
ジョブを定義する方法と、workers
ジョブとは異なるインスタンスとして複数回実行する方法の例があります。
UPDATE以下はlubuntu 12.04でテストされた例です。
最初に、simpleInstanceJob.conf
を指定されたパラメーターでスクリプトを実行するだけのジョブを定義します。これはstart on
およびstop on
スタンザのないジョブであるため、upstart initプロセスによる開始/停止ではありません。
# 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
/etc/init
に入れて、テストしてください:
Sudo start simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar
initctl
を使用してステータスジョブを表示します。
initctl list | grep simpleInstanceJob
これは出力されます:
simpleInstanceJob (foo/bar/fooBar) start/running, process 3828
およびtest.py
出力は/var/log/upstart/simpleInstanceJob-foo_bar_fooBar.log
に保存されます
つかいます:
Sudo stop simpleInstanceJob ENVIRONMENT=foo DRIVER=bar ALGORITHM=fooBar
simpleInstanceJob
の「foo/bar/fooBar
」インスタンスを停止/強制終了します。
simpleInstanceJob
の複数のインスタンスを実行するには、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
この「master」ジョブにはメインexecまたはスクリプトセクションがありません。「slave "または子(個別の" simpleInstanceJob ")ジョブインスタンスが実行されます。
/etc/init
に入れて、テストしてください:
Sudo start laucherJobs
これにより、simpleInstanceJobの3つのインスタンスが開始されます。
initctl list | grep Job
出力されます:
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
最後に、すべてのプロセスを停止します。
Sudo stop laucherJobs
これが問題の解決に役立つことを願っています。
あなたはこれを行うことができます:
start on startup
stop on runlevel [016]
instance $PARM1/$PARM2/$PARM3
setuid BLARG
respawn
exec ${UPSTART_INSTANCE}.sh