如何停止所有Upstart作业的实例?

3
我有一个 Upstart 任务,可以通过参数运行多个相同的任务实例:
```html

我有以下 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,提取运行实例的参数并对每个实例执行stop操作?
我已经尝试过stop my-jobstop my-job ARG1=\* ARG2=\*。两者都无效。

我猜 stop my-job ARG1=EFGH ARG2=2 可以工作,对吗?但它可能不支持通配符。 - errordeveloper
@errordeveloper 是的,那样可以。但是我想要能够一次性停止所有 my-job 的实例。 - ErJab
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

start-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

stop-my-job-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
使用信号。您可以通过执行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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接