Я использую Linux. Я хочу, чтобы процесс (бот irc) запускался каждый раз, когда я запускаю компьютер. Но у меня проблема: сеть плохая и часто отключается, поэтому мне нужно вручную перезагружать бот несколько раз в день. Как мне это автоматизировать?
Дополнительная информация: бот создает файл pid, который называется bot.pid. Бот заново подключается, но только несколько раз. Сеть слишком плохая, поэтому бот иногда убивает себя, потому что не получает ответа.
Что я делаю в настоящее время (иначе мой подход;)) У меня есть задание cron, которое startbot.rb
каждые 5 минут. (Сам скрипт находится в том же каталоге, что и бот)
Сценарий:
#!/usr/bin/ruby
require 'fileutils'
if File.exists?(File.expand_path('tmp/bot.pid'))
@pid = File.read(File.expand_path('tmp/bot.pid')).chomp!.to_i
begin
raise "ouch" if Process.kill(0, @pid) != 1
rescue
puts "Removing abandoned pid file"
FileUtils.rm(File.expand_path('tmp/bot.pid'))
puts "Starting the bot!"
Kernel.exec(File.expand_path('./bot.rb'))
else
puts "Bot up and running!"
end
else
puts "Starting the bot!"
Kernel.exec(File.expand_path('./bot.rb'))
end
Что это делает: Он проверяет, существует ли файл pid, если это правда, он проверяет, является ли kill -s 0 BOT_PID == 1
(если бот запущен), и запускает бота, если одна из двух проверок не прошла / не соответствует действительности.
Мой подход кажется довольно грязным, так как мне сделать это лучше?