Exploremos crontab, sus comandos y varias operaciones asociadas con Crontab.
Aprenderemos a programar tareas utilizando la utilidad cron y, por último, también hablaremos de algunas de las herramientas en línea que nos ayudan a formatear y probar los comandos de cron.
Origen
Crontab significa«tabla cron«. La palabra cron ha sido tomada de la palabra griega Chronos que significa tiempo. Crontab es un proceso demonio del sistema que realizará automáticamente algunas tareas y trabajos según la hora programada.
Casos de uso
Crontab es útil para realizar diversas operaciones como la gestión automática de copias de seguridad, la rotación de archivos de registro, la sincronización de archivos entre máquinas remotas y la limpieza de carpetas temporales, etc. Crontab puede utilizarse para cualquier tipo de trabajo, pero se vuelve especialmente útil cuando empezamos a ocuparnos de trabajos del tipo de administración de sistemas.
Usando cron, un administrador puede programar un trabajo para que se ejecute en una hora y día específicos.
Así que veamos cómo podemos configurar esto.
Sintaxis de Crontab
Para ejecutar una lista de comandos, la utilidad cron lee los archivos de configuración. Para interpretar las líneas de las tablas de configuración crontab sigue una sintaxis Crontab. Crontab tiene seis campos, y los cinco primeros(1-5) definen la fecha y la hora de ejecución. El último campo, es decir, el sexto, puede ser un nombre de usuario y/o tarea /job/command/script a ejecutar.
* * * * NOMBRE_USUARIO COMANDO/SCRIPT-A-EJECUTAR
│ │ │ │ │
│ │ │ │ │
│ │ │ |_________ Día de la semana (0 – 6) (0 es domingo, o utilice nombres)
│ │ |____________ Mes (1 – 12),* significa cada mes
│ │ |______________ Día del mes (1 – 31),* significa cada día
│ |________________ Hora (0 – 23),* significa cada hora
|___________________ Minuto (0 – 59),* significa cada minuto
Notas:
- El asterisco (*) se utiliza para emparejar todos los valores posibles de un campo. Por ejemplo, un asterisco utilizado en el campo hora equivaldría a cada hora o un asterisco en el campo mes equivaldría a cada mes.
- nombre de usuario es opcional(disponible sólo si es el archivo crontab del sistema)
Ejemplos:
Comprendamos la sintaxis anterior con algunos ejemplos
1. Programe un cron para que se ejecute a las 5 AM diariamente
0 5 * * * /scripts/job.sh
2. Programe un cron para que se ejecute dos veces al día a las 6 AM y a las 6 PM
0 6,18 * * * /scripts/job.sh
3. Programe un cron para que se ejecute cada minuto
* * * * /scripts/job.sh
4. Programe un cron para que se ejecute todos los lunes a las 7 PM.
0 19 * * mon /scripts/job.sh
5. Programe un cron para que se ejecute cada 15 minutos.
*/10 * * * * /scripts/job.sh
6. Programe un cron para que se ejecute en los meses seleccionados
* * * feb,jun,oct * /script/job.sh
7. Ejecute el script de shell /home/script/backup.
sh el 4 de marzo a las 7:25 A.M
25 7 4 3 * /home/script/backup.sh
8. Programe un cron para que se ejecute cada 30 segundos
Ya que no tenemos control sobre los segundos en el Crontab, pero podemos lograrlo a través del siguiente proceso de dos pasos.
- Programemos primero una tarea que se ejecute cada minuto.
* * * * * /home/scripts/script.sh
- Ahora utilicemos el comando
sleep
para pausar la ejecución durante 30 segundos.
* * * * sleep 30; /home/scripts/script.sh
La tarea anterior detendrá la ejecución durante 30 segundos, y se reanudará de nuevo.
Tipos de archivos de configuración de Cron
Existen dos tipos de archivos de configuración Cron:
El Crontab del sistema UNIX/Linux
Este requiere privilegios de root porque normalmente se utiliza para servicios del sistema y tareas críticas. El sexto campo (en la descripción de la sintaxis anterior) es el nombre de un usuario para que el comando se ejecute como. Da la capacidad al system crontab de ejecutar comandos como cualquier usuario.
El Crontab de usuario
El usuario también puede instalar sus propios trabajos cron utilizando el comando crontab. Aquí también, el sexto campo (en la descripción de la sintaxis anterior) es el comando a ejecutar, y todos los comandos se ejecutan como el usuario que creó el crontab.
Cada usuario puede tener su propio archivo crontab, y aunque se trata de archivos en /var/spool/cron/crontabs
, no están pensados para ser editados directamente. Necesitamos utilizar el comando crontab para editar o configurar nuestros propios trabajos cron.
¿Cómo funciona?
El servicio cron (demonio) se ejecuta en segundo plano y comprueba constantemente (cada minuto) el archivo /etc/crontab
y los directorios /etc/cron.*/
. También comprueba el directorio /var/spool/cron/
.
Los comandos son ejecutados por cron cuando los campos de minuto, hora y mes coinciden con la hora actual, y al menos uno de los campos de dos días (día del mes o día de la semana) coincide con el día actual.
Comandos básicos
Listado de Cron Jobs existentes
Podemos listar todos los Cron jobs sin abrir el archivo de configuración crontab utilizando el siguiente comando
crontab -l
Si no hay ningún trabajo existente devolverá la salida como
[geekflare@localhost ~]# crontab -l
no crontab para geekflare
[geekflare@localhost ~]#
Si el usuario ya ha añadido algunos de los trabajos se mostrará de la siguiente manera.
[geekflare@localhost ~]# crontab -l
# Edite este archivo para introducir las tareas que ejecutará cron.
#
# Cada tarea a ejecutar debe definirse a través de una única línea
# indicando con diferentes campos cuándo se ejecutará la tarea
# y qué comando ejecutar para la tarea
#
# Para definir la hora puede proporcionar valores concretos de
# minuto (m), hora (h), día del mes (dom), mes (mon)
# y día de la semana (dow) o utilizar '*' en estos campos (para 'cualquiera')
# Tenga en cuenta que las tareas se iniciarán basándose en la
# la noción de tiempo y zonas horarias del demonio cron.
#
# La salida de las tareas crontab (incluidos los errores) se envía por
# correo electrónico al usuario al que pertenece el archivo crontab (a menos que se redirija).
#
# Por ejemplo, puede ejecutar una copia de seguridad de todas sus cuentas de usuario
# a las 5 de la mañana cada semana con
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# Para más información consulte las páginas de manual de crontab(5) y cron(8)
#
# m h dom mon dow command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * /home/cuenta/scripts/reActivateAccountStatus.sh
[geekflare@localhost ~]#
La tabla cron es específica para cada usuario, lo que significa que debe iniciar sesión con un usuario concreto para ver la lista de tablas cron.
Listar Cron para un usuario en particular
Para listar los trabajos programados de otro usuario, utilice la opción -u(Usuario) y -l(Lista).
crontab -u otro_usuario -l
Ejemplo: crontab -u geekflare -l
Añadir/modificar entradas de crontab
Para editar la entrada crontab, podemos utilizar la opción -e
como se muestra a continuación.
crontab -e
El comando anterior abrirá el editor vi donde especificará los detalles del trabajo y guardará el archivo. Una vez guardado, puede verificar si cron está configurado o no con crontab -l
.
Añadir/modificar entradas de crontab para un usuario concreto
Podemos editar el crontab para otro usuario utilizando el siguiente comando
crontab -u otro_usuario -e
Ejemplo: crontab -u geekflare -e
Eliminar una entrada de Crontab
Utilice el parámetro <strong>-r</strong>
con Crontab para eliminar trabajos programados completos sin confirmación de crontab
crontab -r
Si desea confirmación antes de eliminar trabajos programados, utilice la opción <strong>-i</strong>
con -r
, que solicitará confirmación al usuario antes de eliminar el crontab del usuario.
crontab -i -r
[geekflare@localhost ~]# crontab -i -r
crontab: ¿borrar realmente el crontab de geekflare?
Cadena especial de crontab
Aparte de la sintaxis anterior que hemos discutido, también podemos utilizar ocho cadenas especiales proporcionadas por Crontab. No sólo nos ahorrará tiempo, sino que también mejorará la legibilidad.
Cadena especial | Descripción |
@reboot | Ejecutar una vez, después del arranque. |
@anual | Ejecutar una vez al año, es decir, 0 0 1 1 * |
@anualmente | Igual que @yearly |
@mensual | Ejecutar una vez al mes, es decir, 0 0 1 * * |
@semanal | Se ejecuta una vez a la semana, es decir, 0 0 * * 0 |
@diario | Se ejecuta una vez al día, es decir, 0 0 * * * |
@midnight | Igual que @diario |
@horario | Se ejecuta una vez por hora, es decir, 0 * * * * |
Ejemplos de cadenas especiales Crontab
1. Crontab para programar tareas sobre una base anual
@anualmente /scripts/saludo.sh
Podemos ejecutar el anterior para enviar un saludo de año nuevo, Se ejecutará en el primer minuto de cada año.
2. Crontab para programar tareas que se ejecuten mensualmente.
@mensual /scripts/limpieza.sh
Podemos ejecutar el anterior para realizar algunas actividades de limpieza al principio de cada mes.
Del mismo modo, podemos utilizar otras cadenas especiales Crontab para fines semanales, diarios y horarios.
Directorio Cron
El administrador del sistema puede utilizar una programación cron para todo el sistema que se encuentra en el directorio cron predefinido como se muestra a continuación
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.mensual
- /etc/cron.semanal
Ejemplos de Crontab en tiempo real
Vamos a discutir algunos de los ejemplos en tiempo real, que un administrador de sistemas o profesionales de TI suelen utilizar.
Eliminar archivos y directorios vacíos
45 0 * * * geekflare find /tmp -type f -empty -delete
La expresión cron anterior encontrará los archivos y el directorio vacíos del directorio /tmp y los eliminará. Este trabajo se ejecutará a las 12.45 AM diariamente. Necesitamos mencionar el nombre de usuario para realizar este trabajo. En el ejemplo anterior, el usuario geekflare está realizando la operación del trabajo cron.
Ejecutar múltiples tareas utilizando un solo cron
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Las tareas/trabajos múltiples pueden separarse utilizando un punto y coma(;) y pueden asignarse a una única expresión cron.
Herramientas de formateo y comprobación de cron
Hasta ahora hemos hablado de los comandos y la sintaxis de crontab para programar una tarea. Pero qué pasa si usted no es un administrador de sistemas y su trabajo no es programar Cron regularmente, puede que no sea posible recordar la sintaxis y se abre el margen de error. No se preocupe, tenemos una solución para este problema.
Hay varias herramientas de formateo de Cron disponibles en línea.
# 1. Generador de Cron Job
CronJob Generator es una GUI muy fácil de usar en la que puede especificar el minuto, los días y la ruta del script para generar el crontab.
Tomemos un ejemplo en tiempo real donde tengo que ejecutar /home/processMonitor.sh
cada 5 minutos de lunes a viernes.
Entonces, tengo la siguiente sintaxis Cron que puedo poner en mi crontab ejecutando
crontab -e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Generador Crontab
Crontab Generator es otra herramienta útil para generar crontab y con esta herramienta, también puede añadir si desea guardar la salida de cron en el archivo o enviarla por correo electrónico.
# 3. Crontab Guru
Crontab G uru es un sencillo editor en línea de expresiones de programación cron. Además, proporciona un medio útil para supervisar su cronjob. Todo lo que tenemos que hacer es copiar un comando proporcionado y añadirlo al final de la definición de crontab. En caso de que el cron job falle o ni siquiera se inicie, recibirá un correo electrónico de alerta.
En el ejemplo siguiente, el trabajo se ejecutará a las 04:05, todos los días, todos los meses y todas las semanas.
Conclusión
Espero que lo anterior le ayude a comprender mejor Crontab y la configuración de trabajos cron. Programar trabajos a través de Cron es una de las muchas tareas que realiza el administrador de Linux.