Un administrador de sistemas Linux experimentado conoce la importancia de ejecutar los trabajos de mantenimiento de rutina en segundo plano automáticamente.
La utilidad Cron de Linux es una forma efectiva de programar un trabajo de rutina en segundo plano a una hora y/o día específico de manera continua.
Este artículo es parte de la serie en curso Consejos de productividad para geeks. En este artículo, revisemos 15 impresionantes ejemplos de programación de trabajos crontab.
Formato Crontab de Linux
MIN HOUR DOM MON DOW CMD
Campo | Descripción | Valor permitido |
---|---|---|
MÍNIMO | Campo de minutos | 0 a 59 |
HORA | Campo de hora | 0 a 23 |
DOM | Día del mes | 1-31 |
LUN | Campo de mes | 1-12 |
DOW | Día de la semana | 0-6 |
CMD | Comando | Cualquier comando a ejecutar. |
1. Programación de un trabajo para una hora específica
El uso básico de cron es ejecutar un trabajo en un tiempo específico como se muestra a continuación. Esto ejecutará el script de shell de copia de seguridad completa (backup completo) el 10 de junio a las 08:30 a.m. .
Tenga en cuenta que el campo de hora utiliza el formato de 24 horas. Entonces, para las 8 a. m. use 8 y para las 8 p. m. use 20.
30 08 10 06 * /home/ramesh/full-backup
- 30 – Minuto 30
- 08 – 08 a.m.
- 10 – 10º día
- 06 – 6.º mes (junio)
- * – Todos los días de la semana
2. Programe un trabajo para más de una instancia (por ejemplo, dos veces al día)
El siguiente script realiza una copia de seguridad incremental dos veces al día todos los días.
Este ejemplo ejecuta el script shell de copia de seguridad incremental especificado (copia de seguridad incremental) a las 11:00 ya las 16:00 todos los días. El valor separado por comas en un campo especifica que el comando debe ejecutarse en todo el tiempo mencionado.
00 11,16 * * * /home/ramesh/bin/incremental-backup
- 00 – Minuto 0 (parte superior de la hora)
- 11,16 – 11:00 y 16:00
- * – Todos los días
- * – Todos los meses
- * – Todos los días de la semana
3. Programe un trabajo para un intervalo de tiempo específico (p. ej., solo entre semana)
Si desea que se programe un trabajo para cada hora dentro de un intervalo de tiempo específico, use lo siguiente.
Cron Job todos los días durante el horario laboral
Este ejemplo verifica el estado de la base de datos todos los días (incluidos los fines de semana) durante el horario laboral de 9 a. m. a 6 p. m.
00 09-18 * * * /home/ramesh/bin/check-db-status
- 00 – Minuto 0 (parte superior de la hora)
- 09-18 – 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h
- * – Todos los días
- * – Todos los meses
- * – Todos los días de la semana
Cron Job todos los días de la semana durante el horario laboral
Este ejemplo verifica el estado de la base de datos todos los días de la semana (es decir, excluyendo los sábados y domingos) durante el horario laboral de 9 a. m. a 6 p. m.
00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
- 00 – Minuto 0 (parte superior de la hora)
- 09-18 – 9h, 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h
- * – Todos los días
- * – Todos los meses
1-5 -lunes, martes, miércoles, jueves y viernes (todos los días laborables)
4. ¿Cómo ver las entradas de Crontab?
Ver las entradas Crontab del usuario que ha iniciado sesión actualmente
Para ver sus entradas de crontab, escriba crontab -l desde su cuenta de Unix como se muestra a continuación.
ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: This displays crontab of the current logged in user]
Ver entradas de Root Crontab
Inicie sesión como usuario root (su – root) y haga crontab -l como se muestra a continuación.
root@dev-db# crontab -l no crontab for root
Crontab HowTo:Ver las entradas de Crontabs de otros usuarios de Linux
Para ver las entradas de crontab de otros usuarios de Linux, inicie sesión en la raíz y use -u {nombre de usuario} -l como se muestra a continuación.
root@dev-db# crontab -u sathiya -l @monthly /home/sathiya/monthly-backup 00 09-18 * * * /home/sathiya/check-db-status
5. ¿Cómo editar entradas de crontab?
Editar las entradas Crontab del usuario que ha iniciado sesión actualmente
Para editar entradas crontab, use crontab -e como se muestra a continuación. De forma predeterminada, esto editará el crontab actual de los usuarios que iniciaron sesión.
ramesh@dev-db$ crontab -e @yearly /home/ramesh/centos/bin/annual-maintenance */10 * * * * /home/ramesh/debian/bin/check-disk-space ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C [Note: This will open the crontab file in Vim editor for editing. Please note cron created a temporary /tmp/crontab.XX... ]
Cuando guarde el archivo temporal anterior con :wq, guardará el crontab y mostrará el siguiente mensaje que indica que el crontab se modificó correctamente.
~ "crontab.XXXXyjWkHw" 2L, 83C written crontab: installing new crontab
Editar entradas de Root Crontab
Inicie sesión como usuario root (su – root) y haga crontab -e como se muestra a continuación.
root@dev-db# crontab -e
Editar las entradas del archivo Crontab de otros usuarios de Linux
Para editar las entradas de crontab de otros usuarios de Linux, inicie sesión en la raíz y use -u {nombre de usuario} -e como se muestra a continuación.
root@dev-db# crontab -u sathiya -e @monthly /home/sathiya/fedora/bin/monthly-backup 00 09-18 * * * /home/sathiya/ubuntu/bin/check-db-status ~ ~ ~ "/tmp/crontab.XXXXyjWkHw" 2L, 83C
6. Programe un trabajo para cada minuto usando Cron.
Idealmente, es posible que no tenga el requisito de programar un trabajo cada minuto. Pero comprender este ejemplo lo ayudará a comprender los otros ejemplos mencionados a continuación en este artículo.
* * * * * CMD
El * significa todas las unidades posibles, es decir, cada minuto de cada hora durante todo el año. Más que usar este * directamente, te resultará muy útil en los siguientes casos.
- Cuando especifica */5 en el campo de minutos significa cada 5 minutos.
- Cuando especifica 0-10/2 en el campo de minutos significa cada 2 minutos en los primeros 10 minutos.
- Por lo tanto, la convención anterior se puede utilizar para los otros 4 campos.
7. Programe un trabajo cron en segundo plano cada 10 minutos.
Utilice lo siguiente, si desea comprobar el espacio en disco cada 10 minutos.
*/10 * * * * /home/ramesh/check-disk-space
Ejecuta el comando especificado check-disk-space cada 10 minutos durante todo el año. Pero es posible que tenga el requisito de ejecutar el comando solo durante el horario de oficina o viceversa. Los ejemplos anteriores muestran cómo hacer esas cosas.
En lugar de especificar valores en los 5 campos, podemos especificarlo usando una sola palabra clave como se menciona a continuación.
Hay casos especiales en los que, en lugar de los 5 campos anteriores, puede usar @ seguido de una palabra clave, como reinicio, medianoche, anual, por hora.
Palabra clave | Equivalente |
---|---|
@anualmente | 0 0 1 1 * |
@diariamente | 0 0 * * * |
@por hora | 0 * * * * |
@reboot | Ejecutar al inicio. |
8. Programe un trabajo para el primer minuto de cada año usando @yearly
Si desea que un trabajo se ejecute en el primer minuto de cada año, puede usar @yearly palabra clave cron como se muestra a continuación.
Esto ejecutará el mantenimiento anual del sistema mediante el script shell de mantenimiento anual a las 00:00 del 1 de enero de cada año.
@yearly /home/ramesh/red-hat/bin/annual-maintenance
9. Programe un trabajo cron al comienzo de cada mes usando @monthly
Es tan similar al @yearly como el anterior. Pero ejecuta el comando mensualmente una vez usando @monthly palabra clave cron.
Esto ejecutará la copia de seguridad en cinta del script de shell a las 00:00 el 1 de cada mes.
@monthly /home/ramesh/suse/bin/tape-backup
10. Programe un trabajo en segundo plano todos los días usando @daily
Usando el @daily cron, esto hará una limpieza diaria del archivo de registro utilizando el script de shell cleanup-logs a las 00:00 todos los días.
@daily /home/ramesh/arch-linux/bin/cleanup-logs "day started"
11. ¿Cómo ejecutar un comando de Linux después de cada reinicio usando @reboot?
Usando el @reboot palabra clave cron, esto ejecutará el comando especificado una vez que la máquina haya arrancado cada vez.
@reboot CMD
12. ¿Cómo deshabilitar/redirigir la salida de correo Crontab usando la palabra clave MAIL?
De forma predeterminada, crontab envía la salida del trabajo al usuario que programó el trabajo. Si desea redirigir la salida a un usuario específico, agregue o actualice la variable MAIL en el crontab como se muestra a continuación.
ramesh@dev-db$ crontab -l MAIL="ramesh" @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space [Note: Crontab of the current logged in user with MAIL variable]
Si desea que el correo no se envíe a ninguna parte, es decir, detener el envío de la salida crontab por correo electrónico, agregue o actualice la variable MAIL en crontab como se muestra a continuación.
MAIL=""
13. Cómo ejecutar trabajos cron de Linux cada segundo usando Crontab.
No puede programar un cronjob cada segundo. Porque en cron la unidad mínima que puede especificar es minuto. En un escenario típico, no hay motivo para que la mayoría de nosotros ejecutemos un trabajo cada segundo en el sistema.
14. Especifique la variable PATH en Crontab
Todos los ejemplos anteriores especificamos la ruta absoluta del comando de Linux o el script de shell que debe ejecutarse.
Por ejemplo, en lugar de especificar /home/ramesh/tape-backup, si solo desea especificar tape-backup, agregue la ruta /home/ramesh a la variable PATH en el crontab como se muestra a continuación.
ramesh@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/ramesh @yearly annual-maintenance */10 * * * * check-disk-space [Note: Crontab of the current logged in user with PATH variable]
15. Instalación de Crontab desde un archivo Cron
En lugar de editar directamente el archivo crontab, también puede agregar todas las entradas a un archivo cron primero. Una vez que tenga todas esas entradas en el archivo, puede cargarlas o instalarlas en el cron como se muestra a continuación.
ramesh@dev-db$ crontab -l no crontab for ramesh $ cat cron-file.txt @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space ramesh@dev-db$ crontab cron-file.txt ramesh@dev-db$ crontab -l @yearly /home/ramesh/annual-maintenance */10 * * * * /home/ramesh/check-disk-space
Tutoriales adicionales de Cron
- Cron Vs Anacron:Cómo configurar Anacron en Linux (con un ejemplo)
- Cómo ejecutar Cron cada 5 minutos, segundos, horas, días, meses
- 6 ejemplos de comandos crontab de Linux
- Cómo instalar, editar o eliminar trabajos cron en modo por lotes
- Comprenda los comandos at, atq, atrm, batch usando 9 ejemplos
Impresionantes artículos de Linux
Los siguientes son algunos 15 ejemplos impresionantes artículos que pueden resultarle útiles.
- ¡Mami, lo encontré! — 15 ejemplos prácticos de comandos de búsqueda de Linux
- 15 ejemplos para dominar el historial de línea de comandos de Linux
- Comando Unix LS:15 ejemplos prácticos
- ¡Contrólate con el Grep! – 15 ejemplos prácticos de comandos Grep