我使用crontab在某个时候调用耙子任务:每3小时

我想确保当crontab准备执行耙子任务时,可以检查耙子任务正在运行。如果是这样,请不要执行。

这个怎么做。谢谢。

有帮助吗?

解决方案

您可以为此使用锁定文件。任务运行时,如果您获得锁定,请尝试抓住锁定并运行Rake任务。如果您没有锁定,请不要运行耙子;您可能也需要在某个地方记录错误或警告,或者您最终可以完成耙子任务,然后几周或几个月才知道。耙子退出时,解锁锁定文件。

就像是 RAA 可能会有所帮助,但我没有使用过,所以也许没有。

您也可以使用PID文件。您将在某个地方保存着耙子进程ID的文件。在启动Rake之前,您会从该文件中读取PID,并查看该过程是否正在运行;如果不是,则启动耙子并将其PID写入PID文件。耙子存在时,删除PID文件。如果您想非常严格,则需要将其与锁定PID文件结合使用,但这取决于您的特定情况。

其他提示

我会在这里留在这里,因为我认为这很有用:

task :my_task do
    pid_file = '/tmp/my_task.pid'
    raise 'pid file exists!' if File.exists? pid_file
    File.open(pid_file, 'w'){|f| f.puts Process.pid}
    begin
        # execute code here
    ensure
        File.delete pid_file
    end
end

您所需要的只是一颗名为的宝石 pidfile.

将其添加到您的Gemfile:

gem 'pidfile', '>= 0.3.0'

任务可能是:

desc "my task"
task :my_task do |t|
  PidFile.new(piddir: "/var/lock", pidfile: "#{t.name}.pid")
  # do something
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top