Crontab, tareas programadas en Linux

Publicado por Diego Córdoba en

Hoy aprenderemos a planificar tareas o ejecución de comandos en nuestro sistema Linux mediante el uso de su principal herramienta a tal propósito: crontab.

Entre muchas de las tareas cotidianas de un sysadmin se encuentra la de planificación de la ejecución de algún comando, script, binario, etc.crontab

Dado que una buena parte de las actividades requieren ejecutar comandos o scripts periódicamente, y dado también que un sysadmin casi por naturaleza prefiere realizar las tareas con el menor esfuerzo posible, es una gran ventaja en GNU/Linux poseer herramientas como crontab que nos permitan planificar ejecuciones futuras y periódicas de ciertas actividades.

Funcionamiento

Crontab es un daemos, o proceso residente en nuestro sistema GNU/Linux, que cada minuto verifica los archivos de configuración de tareas planificadas, y ejecuta las tareas cuya estampa de tiempo coincida con la hora actual del chequeo.

En el caso de Debian GNU/Linux, los archivos de configuración que serán verificados son:

/etc/crontab
/var/spool/cron/contabs/<username>

Donde <username> representa un nombre de usuario que ha planificado tareas.

Crontab, el comando

El comando crontab es el que le permite a un usuario del sistema planificar tarea de ejecución en alguna estampa de tiempo.

Cada usuario podrá, por defecto, planificar tareas en el sistema, siempre y cuando posea los privilegios suficientes para ejecutar dichas tareas.

Cualquier usuario del sistema podrá verificar su lista de tareas con el siguiente comando:

crontab -l

A su vez, podrá planificar tareas escribiendo una línea de crontab utilizando el siguiente comando:

crontab -e

Este comando abrirá, por terminal, el editor de textos predeterminado, y le permitirá al usuario escribir, al final, las líneas de planificación.

La sintaxis de la línea de planificación.

Cuando un usuario va a planificar una tarea determinada, deberá agregarla en el siguiente formato al final de su archivo de planificación:

mins   hour    dayOfMonth    Month    DayOfWeek      Command
0-59   0-59      1-31        1-12     0-6 (0=dom)    commando

El primer campo ccrontaborresponde a un número de minuto. El segundo al número de hora. Luego el día del mes y el mes. Por último en día de la semana, y el comando a ejecutar.

Cada uno de los parámetros se irán seteando con un número dentro del rango especificado arriba, o mediante un comodín como * cuando no nos interesa fijar dicho parámetro.

Cuando el chequeo del cron encuentre que la hora actual del sistema coincide con la línea de crontab, ejecutará el comando en cuestión.

A medida que más parámetros configuremos, más «condiciones» deberán verificarse para la ejecución de un comando, y por consiguiente, el período de ejecución será más extenso.

Veamos algunos ejemplos

17  *  *  *  *  tarea1
17 03  *  *  *  tarea2
17 03 25  *  *  tarea3
17 03 25 05  0  tarea4
17 03 *   *  2  tarea5

Aquí:

  • La tarea1 se ejecutará una vez por hora, justo cuando la hora marque el minuto 17.
  • La tarea2 se ejecutará una vez por día a las 3.17 de la madrugada.
  • La tarea3 se ejecutará una vez por mes, el día 25 de cada mes, a las 3.17 de la  madrugada.
  • La tarea4 se ejecutará una vez por año, el 25 de mayo de cada año, a las 3.17hs de la madrugada, siempre y cuando ese día sea domingo.
  • La tarea5 se ejecutará una vez por semana, los martes a las 3.17 de la madrugada.

Uso de ‘/’

Podremos utilizar la ‘/’ para establecer algunos tiempos especiales. Veamos los siguientes ejemplos:

17 03 0-31/3 * *  tarea6
0-45/8 17 * * * tarea7
* */8 * * 5  tarea8
  • La tarea6 se ejecutará a las 3.17 de la mañana, cada 3 días.
  • La tarea7 se ejecutará a cada 8 minutos durante los primeros 45 minutos de la hora 17 cada día.
  • La tarea8 se ejecutará cada 8 horas los días jueves.

Espero que les sean de utilidad estos ejemplos prácticos para entender la forma de planificación de tareas de crontab!

Algunos comodines

En la sección de estampa de tiempo se pueden colocar algunos comodines que permiten realizar diferentes tareas. Aquí un breve resumen de ellos:

  • @reboot: corre el comando al iniciar el sistema operativo
  • @yearly o @annually: corre el comando una vez por año en el timestamp «0 0 1 1 *»
    • El 1 de enero a las 00:00
  • @monthly: corre el comando una vez por mes en el timestamp «0 0 1 * *»
    • El 1 de cada mes a las 00:00
  • @weekly: corre el comando una vez por semana en el timestamp «0 0 * * 0»
    • cada domingo a las 00:00
  • @daily o @midnight: corre el comando una vez por día en el timestamp «0 0 * * *»
    • a las 00:00 de cada día
  • @hourly: corre el comando una vez por hora en el timestamp «0 * * * *»
    • al minuto 0 de cada hora

NOTA: cambiando el editor predeterminado

Para cambiar el editor de textos predeterminado de terminal, podemos utilizar el siguiente comando:

update-alternatives –config editor

Cuya salida será algo similar a la liguiente:

die@tuta2:~$ update-alternatives --config editor
There are 6 choices for the alternative editor (providing /usr/bin/editor).
  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /usr/bin/vim.gtk     50        auto mode
  1            /bin/nano            40        manual mode
  2            /usr/bin/emacs23     0         manual mode
  3            /usr/bin/mcedit      25        manual mode
* 4            /usr/bin/vim.basic   30        manual mode
  5            /usr/bin/vim.gtk     50        manual mode
  6            /usr/bin/vim.tiny    10        manual mode
Press enter to keep the current choice[*], or type selection number: _

En este caso, mi editor predeterminado es el Vim 🙂
Pueden escribir el número de la opción que deseen.

Otros planificadores

Cabe aclarar que crontab no es la única opción para planificación de tareas.

Anacrontab también es una herramienta que complementa el funcionamiento de crontab mediante verificación de ejecución de tareas. Crontab, si en el momento en el que debe ejecutar la tarea, se encuentra apagado, o el sistema se encuentra apagado, nunca ejecutará esa tarea, hasta la siguiente estampa de tiempo planificada. Anacrontab cubre esta «carencia», aunque con menor granularidad horaria.

at también es un comando de planificación de tareas más simle y orientado a ejecuciones únicas.

Espero les sea útil!

¿Conoces alguna otra herramienta? Estás invitado a comentar este artículo!

Hasta la próxima!


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador

3 comentarios

Repa · 10 febrero, 2017 a las 12:29

Muy util, gracias!!

Diego Cordoba - @d1cor · 12 junio, 2017 a las 20:00

Fede! lo de la tarea 3 fue un error de typeo, ahí está corregido. Sí, el mes debe ser 1-12, o en su defecto, * o algún otro comodín.

Por lo de la tarea4, tenés razón, solo se ejecuta cuando es domingo (0 en el día de la semana). Está actualizado eso también.

Gracias por tus aportaciones!
Abz!

Los comentarios están cerrados.