3

我有以下新贵作业,它需要参数来运行同一作业的多个实例:

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在一个命令中停止所有实例,而不是执行 grep on initctl list,提取运行实例的参数并对每个实例my-job执行 a stop

我试过stop my-jobstop my-job ARG1=\* ARG2=\*。两者都不起作用。

4

2 回答 2

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

停止我的工作任务.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逻辑。我应该注意,我的原始用例只需要一个实例变量,我还没有用两个这样的变量测试过。

于 2012-12-23T17:09:09.027 回答
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
于 2014-02-20T15:20:44.360 回答