Automatización de tareas informáticas con Cron
En el mundo de la informática existen una multitud de tareas que se ejecutan de forma reiterada. Con este fin las distribuciones de Linux suelen proveer cron.
El servicio cron permite la ejecución de órdenes en fechas y horas determinadas. Estas órdenes son llamadas cronjobs y los comandos o scripts que deben ejecutarse periódicamente se especifican en un archivo llamado crontab. Es importante tener en cuenta que cada usuario del sistema puede escribir su propio crontab y la tarea se ejecutará aunque el usuario no esté conectado.
Aunque el crontab se guarda en un archivo de texto, no esta pensado para
editarse directamente, para acceder a el ejecuta el comando crontab -e
. Sus expresiones lucen así:
┌───────────── minuto (0–59)
│ ┌───────────── hora (0–23)
│ │ ┌───────────── día del mes (1–31)
│ │ │ ┌───────────── mes (1–12)
│ │ │ │ ┌───────────── día de la semana (0–6)
│ │ │ │ │
* * * * * comando-a-ejecutar
Notas:
- En la opción del día de la semana, el domingo es 0 y contando desde ahi, el sábado será 6.
- La opción de hora utiliza el tiempo en formato de 24 horas.
- Se admiten listas. Una lista es un conjunto de números separados por coma, o rangos separados por guión. Por ejemplo: “1,2,5,9” o “0-4,8-12”.
- El asterisco * designa que se ejecutará en todos los valores posibles del rango.
- La virgulilla ~ nos permite obtener un valor aleatorio dentro del rango.
- Seguir un campo con /número especifica saltos de número a través del rango. Por ejemplo: “*/2” se puede utilizar en el campo de la hora para especificar la ejecución del comando cada dos horas.
- Se ignoran las lineas en blanco, los espacios a la izquierda, los tabuladores; y las lineas que comienzan con signo de numeral # son comentarios y se ignoran.
En lugar de los cinco primeros campos, se pueden usar cadenas especiales:
- @reboot Se ejecuta una vez, al encender el computador.
- @yearly Se ejecuta cada 1 de enero (0 0 1 1 *)
- @monthly Se ejecuta el primer día de cada mes (0 0 1 * *)
- @weekly Se ejecuta todos los domingos (0 0 * * 0)
- @daily Se ejecuta cada medianoche (0 0 * * *)
- @hourly Ejecutar cada hora, a la hora en punto (0 * * * *)