pgu*_*rio 18
我会把它留在这里,因为我觉得它很有用:
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
Run Code Online (Sandbox Code Playgroud)
您可以为此使用锁定文件。任务运行时,尝试抢锁,如果拿到锁就运行rake任务。如果你没有获得锁,那么就不要运行 rake;您可能也想在某处记录错误或警告,否则您可能会在您意识到之前几周或几个月内您的 rake 任务没有执行任何操作。当 rake 退出时,解锁锁定文件。
像RAA这样的东西可能会有帮助,但我没有使用过,所以可能没有。
您还可以使用 PID 文件。您将在某个地方有一个文件来保存 rake 进程的进程 ID。在启动 rake 之前,您从该文件中读取 PID 并查看该进程是否正在运行;如果不是,则启动 rake 并将其 PID 写入 PID 文件。当rake存在时,删除PID文件。如果您想非常严格,您可以将其与锁定 PID 文件结合起来,但这取决于您的具体情况。