【问题标题】:How do I stop all instances of an upstart job如何停止暴发户工作的所有实例
【发布时间】:2012-10-31 22:26:02
【问题描述】:

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

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=\*。两者都不起作用。

【问题讨论】:

  • 我认为stop my-job ARG1=EFGH ARG2=2 有效,对吧?我可能不支持 windcards
  • @errordeveloper 是的,这行得通。但我希望能够一次停止所有我的工作实例。

标签: ubuntu upstart


【解决方案1】:

我最终做了以下事情,它适用于[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 逻辑。我应该注意,我的原始用例只需要一个实例变量,我还没有用两个这样的变量测试过。

【讨论】:

    【解决方案2】:

    使用信号。您可以通过 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多