当服务器上的任务失败时,仅在该服务器上运行不同的任务

时间:2014-05-29 19:01:58

标签: ruby capistrano

我有一个capistrano任务,可以在多台服务器上重启后台作业。有时,该作业将在服务器上死亡,因此重置命令将失败,因为作业未运行。在这种情况下,我想调用我的启动任务(而不是重启任务)。这是我的尝试:

namespace :job do
  desc "Restart the job"
  task :restart, :roles => :app do
    output = nil
    begin
      run "sudo restart myjob DEPLOY=true NAME='myjob1'" do |channel, stream, data|
        output = data
      end
    rescue Capistrano::CommandError => error
      if output.match("restart: Unknown instance: myjob")
        puts "****** WARNING ***** job was not running -- starting it"
        start
      else
        puts "some other unknown error, die"
        raise error
      end
    end
  end

  desc "Start the job"
  task :start, :roles => :app do
    run "sudo start myjob DEPLOY=true NAME='myjob1'"
  end
end

我上面所做的问题是,当我调用“start”时,它将在所有服务器上运行启动任务,当我只希望它在死亡的服务器上运行时。也许我可以以某种方式将主机传递给start命令?一直未能找到如何。欢呼声。

0 个答案:

没有答案