Здравствуйте! Есть некий процесс, который должен работать постоянно, но может повиснуть. Хочу написать скрипт на Ruby, который будет запускать этот процесс и в отдельном потоке с определенным интервалом проверять его работу (особым образом)
class PingWatchdog
def initialize(server)
Thread.new {
while true do
unless LaLaLa.test?(IP, PORT, PING_TIMEOUT)
server.stop
end
sleep WATCHDOG_DELAY
end
}
end
end
class ServerProcess
def initialize(*opts)
@proc_pid = spawn(CMD)
@proc_thr = Process.detach(@proc_pid)
@watchdog = PingWatchdog.new self
end
def wait
@proc_thr.join
end
def command(data)
$stdout << "#{data}\n"
end
def kill
Process.kill('TERM', @proc_pid)
end
end
while true
server = ServerProcess.new
server.wait
end
Так вот, можно ли так каждый раз запускать новый PingWatchdog? Когда будет переназначена переменная server, не останется ли работать поток в PingWatchdog? Если он будет запущен несколько раз, это нарушит работу процесса
Да и вообще, может быть можно как-то правильнее это реализовать?
Буду рад любым советам!