Estoy usando Linux. Quiero que se ejecute un proceso (un bot de irc) cada vez que inicio la computadora. Pero tengo un problema: la red es mala y se desconecta a menudo, así que necesito reiniciar manualmente el bot unas cuantas veces al día. ¿Cómo puedo automatizar eso?
Información Adicional: El bot crea un archivo pid, llamado bot.pid El bot se reconecta solo, pero solo unas pocas veces. La red es demasiado mala, por lo que el bot se mata a veces porque no obtiene respuesta.
Lo que hago actualmente (también conocido como mi enfoque;))
Tengo un trabajo cron en ejecución startbot.rb
cada 5 minutos (El script en sí está en el mismo directorio que el bot)
La secuencia de comandos:
#!/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
Lo que esto hace:
Comprueba si existe el archivo pid, si eso es cierto, comprueba si kill -s 0 BOT_PID == 1
(si el bot se está ejecutando) e inicia el bot si una de las dos comprobaciones falla / no es verdadera.
Mi enfoque parece ser bastante sucio, entonces, ¿cómo lo hago mejor?
Respuestas:
Crucé mi pregunta en stackoverflow.com, donde obtuve la respuesta;)
https://stackoverflow.com/a/13627784/1081936
fuente