Module: PidLock
- Defined in:
- lib/pid_lock.rb,
lib/pid_lock/version.rb
Constant Summary collapse
- VERSION =
"0.1.2"
Class Attribute Summary collapse
Class Method Summary collapse
- .ensure_single_running(pid_name) ⇒ Object
- .lock(pid_name) ⇒ Object
- .locked?(pid_name) ⇒ Boolean
- .pid(pid_name) ⇒ Object
- .stop(pid_name) ⇒ Object
- .unlock(pid_name) ⇒ Object
Class Attribute Details
.pid_path ⇒ Object
7 8 9 |
# File 'lib/pid_lock.rb', line 7 def pid_path @pid_path || "tmp/pid_locks" end |
Class Method Details
.ensure_single_running(pid_name) ⇒ Object
11 12 13 14 15 16 17 18 19 |
# File 'lib/pid_lock.rb', line 11 def ensure_single_running(pid_name) return if locked?(pid_name) PidLock.lock(pid_name) begin yield ensure PidLock.unlock(pid_name) end end |
.lock(pid_name) ⇒ Object
21 22 23 24 |
# File 'lib/pid_lock.rb', line 21 def lock(pid_name) Dir.exist?(pid_path) || FileUtils.mkdir_p(pid_path) File.write(File.join(pid_path, "#{pid_name}.pid"), $PID) end |
.locked?(pid_name) ⇒ Boolean
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/pid_lock.rb', line 26 def locked?(pid_name) return false unless File.exist?(File.join(pid_path, "#{pid_name}.pid")) begin Process.kill(0, pid(pid_name)) return true rescue StandardError self.unlock(pid_name) return false end end |
.pid(pid_name) ⇒ Object
48 49 50 |
# File 'lib/pid_lock.rb', line 48 def pid(pid_name) File.read(File.join(pid_path, "#{pid_name}.pid")).to_i end |
.stop(pid_name) ⇒ Object
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/pid_lock.rb', line 37 def stop(pid_name) return unless File.exist?(File.join(pid_path, "#{pid_name}.pid")) pid = File.read(File.join(pid_path, "#{pid_name}.pid")) return if pid.to_s.empty? begin Process.kill("TERM", pid.to_i) rescue StandardError end unlock(pid_name) end |
.unlock(pid_name) ⇒ Object
52 53 54 55 56 |
# File 'lib/pid_lock.rb', line 52 def unlock(pid_name) if File.exist?(File.join(pid_path, "#{pid_name}.pid")) File.delete(File.join(pid_path, "#{pid_name}.pid")) end end |