Automatización de tareas con Cron
La terminal de Linux nos permite realizar cosas que van más allá de la simple escritura de comandos. En este caso hablaremos de la automatización de tareas con Cron. La automatización nos permite no solo evitarnos trabajos repetitivos si no también hacer que el ordenador las realice cuando no estamos presentes. Esto es particularmente útil en servidores.
Cron es un demonio que se encarga de realizar tareas en un intervalo específico de tiempo. Aunque su función es ocuparse de tareas regulares de mantenimiento del sistema, podemos agregar otras que nos resulten de interés.
Cuando hablamos de demonios no nos referimos a un diablito adentro de nuestro ordenador. En informática un demonio (del inglés daemon) es una aplicación o proceso ejecutado en segundo plano en el sistema operativ sin requerir interacción directa con el usuario. Entre sus ocupaciones están las conexiones de red, impresión, servidores web o monitoreo de recursos.
Algunas de sus características principales
- Generalmente se inician con el el arranque del sistema.
- Corren en segundo plano, sin necesidad de que el usuario se entere de su existencia.
- Están pensados para ejecutar tareas de manera permanente o como reacción a determinados eventos.
Automatización de tareas con Cron
Si queremos indicarle que hacer a Cron podemos hacerlo mediante un archivo crontab. Se trata solamaente de un archivo de texto que indica una serie de comandos que cron deberá ejecutar en una fecha especificada. Hay dos tipos de archivos crontab: el archivo crontab creado por el sistema y, los creados por los usuarios.
Bajo ningún punto de vista deberíamos tocar el archivo crontab del sistema que es el utilizado por Linux para la configuración y mantenimient. Es imposible modificarlo por error ya que este archivo se encuentra en la carpeta. /etc/crontab.
Creando nuestros propios crontabs
Cron necesita que las tareas que le asignemos tengan los parámetros indicados en este orden:
h: Hora de inicio en intervalo 0-23.
m: Minutos en intervalo 0-59.
d: Día del mes entre el intervalo 1-31
mes: Especifica el mes del año con un intervalo 1-12
s: Día de la semana con el intervalo 0-6
Estos datos van dentro del archivo crontab. Para crear este archivo escribimos el comando:
crontab –u nombre de usuario –e
Si el crontab va a ser para el usuario por defecto podemos omitir el parámetro -u
Cuando lo ejecutemos por primera vez nos dirá que el archivo no existe y nos propondrá crear uno y editarlo con alguno de los editores instalados en el equipo.
Algunos puntos a tener en cuenta al editar crontab son:
- Cada tarea va en una línea
- En todos los casos se deben indicar la fecha y hora en que debe ejecutarse cada tarea. Para indicar peridicidad (Por ejemplo martes 18 horas) en lugar del resto de los parámetros se escriben asterísticos.(*)
- Es posible asignar más de un valor a un parámetro (Por ejemplo martes y jueves a las 18) Separando ambos valores por comas.
- Hay que dejar espacios entre los parámetros.
- Indicar el directorio donde está el lanzador del comando.
Para dar un ejemplo, si queremos reiniciar todos los días el ordenador a las 19:
0 19 * * * /sbin/reboot
Para que el reinicio sea solo los miércoles, la instrucción sería:
0 20 * * 3 /sbin/reboot
.
Existen algunos atajos que nos evitan escribir todos los parámetros:
@hourly: Si queremos ejecutar un comando al inicio de cada hora.
@daily: Para correr el comando al empezar cada día.
@weekly: Corre el comando el primer día de la semana.
@monthly: El comando se ejecuta el primer minuto de cada mes.
@yearly: Lo mismo pero en el primer minuto de cada año..
Algunos ejemplos de utilización de este comando:
@daily /bin/sh /ruta_al_script/nombre_del_script.sh
Ejecuta instrucciones personalizadas en un script bash al comienzo del día.
@hourly /bin/python3 /ruta_al_script/nombre_del_script.py
Hace que un script en pytnon se ejecute a cada hora.
Siempre debemos asegurarnos que los scripts tengan permisos de ejecución.