如何停止新手工作的所有实例

时间:2012-10-31 22:26:02

标签: ubuntu upstart

我有以下的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-jobstop my-job ARG1=\* ARG2=\*。两者都不起作用。

2 个答案:

答案 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 || startstatus && 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