frankfurter/lib/scheduler/daemon.rb
Hakan Ensari e5815737c1
Spring cleaning
- bumped gems
- rm bots
- rm pry byebug
- added rubocop-shopify and corrected generated warnings
2024-11-20 14:14:27 +01:00

64 lines
911 B
Ruby

# frozen_string_literal: true
module Scheduler
class Daemon
attr_reader :pid
class << self
def start
new.start
end
end
def initialize
@parent_pid = Process.pid
end
def start
return if pid
@pid = fork do
monitor_parent
run
end
monitor_child
end
private
def run
load("bin/schedule")
end
def monitor_child
return if @child_monitor
@child_monitor = Thread.new do
loop do
sleep(5)
unless alive?(pid)
@pid = nil
start
end
end
end
end
def monitor_parent
Thread.new do
loop do
exit unless alive?(@parent_pid)
sleep(1)
end
end
end
def alive?(pid)
Process.getpgid(pid)
true
rescue Errno::ESRCH
false
end
end
end