class Rufus::Scheduler::FileLock


The standard flock mechanism, with its own class thanks to @ecin

def initialize(path)

def initialize(path)
  @path = path.to_s
end

def lock


its lockfile (at the given path).
Locking is successful if this Ruby process can create and lock
def lock
  return true if locked?
  @lockfile = nil
  FileUtils.mkdir_p(::File.dirname(@path))
  file = File.new(@path, File::RDWR | File::CREAT)
  locked = file.flock(File::LOCK_NB | File::LOCK_EX)
  return false unless locked
  now = Time.now
  file.print("pid: #{$$}, ")
  file.print("scheduler.object_id: #{self.object_id}, ")
  file.print("time: #{now}, ")
  file.print("timestamp: #{now.to_f}")
  file.flush
  @lockfile = file
  true
end

def locked?

def locked?
  !! (@lockfile && @lockfile.flock(File::LOCK_NB | File::LOCK_EX))
end

def unlock

def unlock
  !! (@lockfile && @lockfile.flock(File::LOCK_UN))
end