因此,我正在研究一个新进程,想知道是否可以传递多个参数
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
我可以做这样的事吗?
答案1
是的,可以定义多个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
我不清楚你将如何使用实例节。如果您需要启动作业的多个实例,您可以更改此示例:
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
更新 这是在 lubuntu 12.04 上测试的示例。
首先定义simpleInstanceJob.conf
一个仅使用给定参数运行脚本的作业。这是一个没有start on
andstop 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
停止/杀死“ foo/bar/fooBar
”实例simpleInstanceJob
。
为了运行的多个实例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
这 ”掌握“作业没有主执行或脚本部分,它将运行(没有 pid)持续时间,即“奴隶“或子(单个“simpleInstanceJob”)作业实例运行。
将其放入/etc/init
并测试:
sudo start laucherJobs
这将启动三个 simpleInstanceJob 实例:
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
希望这有助于解决您的问题。
答案2
你可以这样做:
start on startup
stop on runlevel [016]
instance $PARM1/$PARM2/$PARM3
setuid BLARG
respawn
exec ${UPSTART_INSTANCE}.sh