Whenever: una manera sencilla de administrar tareas en Cron con Ruby
alfredo publicó esto el 15/03/10 en Herramientas, Open Source, Ruby. No hay comentariosSi bien hace bastante tiempo que soy usuario de GNU/Linux, no suelo crear tareas en cron con frecuencia por lo que necesito investigar su poderosa sintáxis cada vez que debo crear trabajos que deben ejecutarse a intervalos regulares.
Hace poco por casualidad me topé con Whenever, una gema de Ruby que nos permite crear tareas en cron de manera muy sencilla. A través de un DSL nos abstrae de la complejidad de la sintáxis de cron. Whenever está muy integrado al framework de desarrollo web Ruby on Rails, aunque puede utilizarse en un programa independiente que genera salidas de tareas para cron y hasta actualiza el archivo crontab. En este post vamos a ver la manera de crear tareas con Whenever desde el punto de vista de un Administrador de Sistemas.
Como es habitual el primer paso es la instalación de la librería, ésto lo hacemos con el administrador de paquetes de Ruby:
sudo gem install whenever
Creamos un archivo scheduler.rb en donde vamos a detallar las tareas que queremos ejecutar y con qué frecuencia. La primer acción que deberíamos especificar es el path de trabajo a través de la directiva set
set :path, '/home/alfredo/Proyectos'
Ahora definimos dentro de un bloque every la frecuencia con la que deseamos correr las tareas. Técnicamente, la frecuencia está determinada en segundos, pero es más fácil definirlas con .minutes, .hours, .days y .months.
# se ejecuta cada 15 minutos every 15.minutes do command 'comando_que_deseo_ejecutar' command '/usr/bin/aplicacion' end
Cuando la frecuencia es mayor a 1 hora, podemos agregar el parámetro :at y determinar en qué momento de ese período de tiempo ejecutamos la tarea dentro del bloque:
# se ejecuta cada 2 horas en el minuto 25 de cada hora every 2.hours, :at =>25 do command '/ruta/comando' end
También podemos especificar al parámetro :at con literales. Ésto es especialmente útil cuando tenemos frecuencias mayores a 1 día, por ejemplo:
# ejecuta cada 2 dias a las 4:30 a.m. every 2.days, :at => "4:30am" do command '/ruta/backup_base_datos' end
Si es necesario podemos decidir incluso el día de la semana en la que queremos que se ejecute:
# ejecuta todos los viernes a las 00:30 a.m. every :friday, :at => "00:30am" do command '/ruta/backup_home' end
Es posible especificar cualquier día de la semana y además :weekend para correr un programa los sábados y domingos, y :weekday para cuando necesitamos hacerlo de lunes a viernes.
Para escribir el archivo crontab ejecutamos el siguiente comando:
whenever -f scheduler.rb --update-crontab
Si todo salió bien deberíamos ver la siguiente salida [write] crontab file updated en la consola. Ahora resta revisar la salida con crontab -e.
25 0,2,4,6,8,10,12,14,16,18,20,22 * * * /ruta/comando 30 4 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * /ruta/backup_base_datos 30 0 * * 5 /ruta/backup_home 0,15,30,45 * * * * comando_que_deseo_ejecutar 0,15,30,45 * * * * /usr/bin/aplicacion
Todavía no hay comentarios. ¡Publicá el primero!.