¡Buen día!
Una de las tareas del administrador de red o sistemas es la de crear tareas programadas para ejecutar procedimientos periódicamente (Automatización de procesos); En Windows, como tenemos un entorno gráfico, se hace un poco más fácil la creación de tareas programadas, dado que hasta hay un asistente para crearlas, pero en el mundo GNU/Linux es un poquito más complicado, en el sentido de que no es un asistente gráfico el que nos guía para hacerlo (por lo menos, así por línea de comando que yo sepa)… hay que tener ciertos conocimientos de cómo es que funciona la típica solución de programación de tareas en el mundo Linux. Para nuestro caso, veremos en concreto para SO Ubuntu, pero realmente es prácticamente lo mismo en todos los sistemas basados en Unix.
Cron es un administrador regular de procesos en segundo plano (servicio o demonio) que nos permite poder ejecutar un comando, programa, script, etc. en un momento específico, ya sea de forma periódica (diario, semanal, mensual, anual, etc.) o una sola vez en el tiempo.
Para establecer las tareas programadas (qué ejecutar, cuándo y con qué frecuencia), se utiliza un archivo de configuración llamado crontab. También, crontab generalmente es un comando, el cual nos permite gestionar las tareas programadas.
Cron se ejecuta en segundo plano y comprueba constantemente que los archivos crontab o cron no tengan tareas pendientes.
¿Qué son los Cron Jobs (o tareas)?
- En una línea de texto se ingresa, según la sintaxis debida, la tarea programada.
- Son usados para programar comandos que se ejecutarán periódicamente.
- Puede que sean comandos de configuración o scripts.
Tenemos 2 tipos de configuración del cron:
- Crontab de sistema
- Usualmente son usados por los servicios del sistema y las tareas críticas requieren de privilegios de root.
- Crontab de usuario
- Cada usuario tiene su propio crontab y los comandos serán ejecutados con los permisos del usuario que es dueño del crontab
Comando crontab
Éste comando es el que utilizaremos para gestionar las tareas programadas. A continuación, algunos de los más usados o principales:
- crontab -e
- Sirve para editar el crontab del usuario actual.
- crontab -l
- Muestra (o lista) las tareas actuales del crontab del usuario.
- crontab -r
- Para suprimir todas las tareas del crontab del usuario.
- crontab -v
- Muestra la fecha de última modificación del crontab (disponible en algunos sistemas…)
Sintaxis del cron job
Se trata básicamente de 6 campos. A continuación, un ejemplo de una línea o Cron Job (dentro del archivo crontab)
1 2 3 4 5 /ruta/a/comando arg1 arg2...
Donde:
- 1: Minuto (Puede tomar el valor de entre 0 a 59)
- 2: Horas (Valor entre 0 a 23)
- 3: Días (Valor entre 1 a 31)
- 4: Mes (Valor entre 1 a 12 [y 12 = Diciembre])
- 5: Día de la semana (Valor entre 0 a 7 [Tomar en cuenta que 0 y 7 = Domingo])
Lo que esta en rojo, es la línea de comando que queremos ejecutar… puede llevar todos los argumentos, tuberías, etc. que se quiera.
Ejemplos
- Tenemos un script en /root/backup.sh , el cual queremos que se ejecute los días lunes, en los meses de Junio y Julio, a las 3:00pm
Lo primero es entrar al crontab para editarlo para añadir nuestro cron job (línea):
crontab -e
Añadimos al final del archivo…
0 15 * 6,7 1 /root/backup.sh
Guardamos y cerramos el archivo. Notar que se trata de hora militar.
Tomar en cuenta que, la primera vez que ejecutamos crontab -e en Ubuntu, se nos solicitará confirmar qué editor se quiere usar… Yo recomiendo usar nano (por ser más fácil).
Por defecto, cada vez que se ejecute un cron job (tarea) se realiza un envío de correo electrónico a la bandeja de entrada local del usuario propietario del crontab. Se puede personalizar la cuenta de correo para el envío de la notificación, agregando al crontab lo siguiente:
MAILTO="oscard@ingdiaz.org"
A continuación, otros ejemplos de programación:
Otro detalle que es muy útil es que, para establecer una frecuencia de ejecución del comando podemos hacer uso de la siguiente sintaxis:
*/5 * * * * comando
Con esto, cada 5 minutos se estará ejecutando el comando mencionado. Esto aplica para horas, días y meses también.
Otros detalles
En lugar de los cinco primeros campos, podemos utilizar cualquiera de las ocho cadenas de texto que a continuación vemos.
Dependerá de la distribución que funcionen claro esta, pero lo mejor es hacerlo a lo tradicional
Los usuarios del sistema, al usar el comando crontab, se instala el archivo crontab del usuario en /var/spool/cron/crontabs ó (en algunos sistemas) /var/cron/tabs/
/etc/crontab Es el archivo del sistema de crontabs. Es usado por el usuario root o servicio (demonio) del sistema para configurar las tareas del sistema.
El archivo crontab en /etc/ se muestra así:
Cron lee los archivos del directorio “/etc/cron.d/”. Por lo general, distintos servicios colocan sus cron jobs aquí.
Como superusuario es posible usar los directorios que se mostrarán más adelante para configurar cronjobs y adaptarlos a nuestras necesidades. El comando “run-parts” ejecuta scripts o programas en un directorio vía /etc/crontab. Veamos los
directorios:
Eso sería lo básico de conocer; Espero que les pueda servir.
¡Saludos!