Я использую линукс. Я хочу, чтобы процесс (бот 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
(если бот работает), и запускает бота, если одна из двух проверок не удалась / не соответствует действительности.
Мой подход кажется довольно грязным, так как мне сделать это лучше?