我有以下的upstart作业,该作业使用参数来运行同一作业的多个实例:
instance $ARG1,$ARG2
script
exec /path/to/executable "$ARG1" "ARG2"
end script
现在,如果我像这样开始我的工作的两个实例:
$ start my-job ARG1=ABCD ARG2=1
my-job (ABCD,1) start/running, process 6242
$ start my-job ARG1=EFGH ARG2=2
my-job (EFGH,2) start/running, process 6254
如何在一个命令中停止my-job
的所有实例,而不是在initctl list
上执行grep,提取运行my-job
实例的参数并执行stop
在每个实例上。
我已尝试stop my-job
和stop my-job ARG1=\* ARG2=\*
。两者都不起作用。
答案 0 :(得分:2)
我最终做了以下操作,它适用于[start|stop|restart] svc
。
<强> scv.conf: 强>
description "An Example Service"
start on networking
stop on runlevel[06]
<强> SVC-instance.conf: 强>
instance $ADDR,$PORT
manual
respawn
console log
exec /opt/svc/bin/svc -a $ADDR -p $PORT
<强> 启动SVC-task.conf: 强>
start on starting svc
task
script
for a in 10.10.10.1 10.10.10.2 10.10.10.3 10.10.10.4
do
for p in 4001 4002 4003 4004
do status svc-instance ADDR=$a PORT=$p \
|| start svc-instance ADDR=$a PORT=$p \
done
done
end script
停我的在职task.conf:的
start on stopping svc
task
script
for a in 10.10.10.1 10.10.10.2 10.10.10.3 10.10.10.4
do
for p in 2001 2002 2003 2004
do status svc-instance ADDR=$a PORT=$p \
&& stop svc-instance ADDR=$a PORT=$p \
|| continue
done
done
end script
亲自了解您的案例中是否需要status || start
和status && stop || continue
逻辑。我应该注意,我的原始用例只需要一个实例变量,而我没有使用两个变量来测试它。
答案 1 :(得分:1)
使用信号。您可以通过执行initctl emit scv-stop
scv.conf:
description "An Example Service Starter"
start on networking
stop on runlevel[06]
for addr in 10.10.10.1 10.10.10.2 10.10.10.3 10.10.10.4;
{
for port in 4001 4002 4003 4004;
{
status svc-n $addr:$port || start svc-n ADDR=$addr PORT=$port
}
}
script
SCV-n.conf
description "An Example Service Instance"
instance $ADDR:$PORT
stop on runlevel[06] or scv-stop
script
exec /opt/svc/bin/svc -a $ADDR -p $PORT
end script