Crontab en Linux: con ejemplos y herramientas en tiempo real
Publicado: 2015-07-26Exploremos crontab, sus comandos y varias operaciones asociadas con Crontab.
Aprenderemos cómo programar tareas usando la utilidad cron y, por último, también discutiremos algunas de las herramientas en línea que nos ayudan a formatear y probar los comandos cron.
Origen
Crontab significa " tabla cron ". La palabra cron se ha tomado 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 el tiempo programado.
casos de uso
Crontab es útil para realizar diversas operaciones, como el manejo de copias de seguridad automáticas, la rotación de archivos de registro, la sincronización de archivos entre máquinas remotas y la limpieza de carpetas temporales, etc. Crontab se puede usar para cualquier tipo de trabajo, pero se vuelve especialmente útil cuando comenzamos a tratar con administración del sistema tipo de trabajo.
Usando cron, un administrador puede programar un trabajo para que se ejecute en un día y una hora específicos.
Así que vamos a ver cómo podemos configurar esto.
Sintaxis crontab
Para ejecutar una lista de comandos, la utilidad cron lee los archivos de configuración. Para interpretar las líneas en las tablas de configuración de crontab , se sigue una sintaxis de Crontab. Crontab tiene seis campos, y los primeros cinco (1-5) campos definen la fecha y la hora de ejecución. El último campo, es decir, el sexto campo, podría ser un nombre de usuario y/o tarea/trabajo/comando/secuencia de comandos a ejecutar.
* * * * * COMANDO DE NOMBRE_USUARIO/SCRIPT-TO-EXECUTE
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Día de la semana (0 – 6) (0 es domingo, o use nombres)
│ │ │ | ____________ Mes (1 – 12),* significa cada mes
│ │ | ______________ Día del mes (1 – 31),* significa todos los días
│ | ________________ Hora (0 – 23),* significa cada hora
| ___________________ Minuto (0 – 59), * significa cada minuto
Notas :
- El asterisco (*) se utiliza para hacer coincidir todos los valores posibles de un campo. Por ejemplo, un asterisco utilizado en el campo de la hora equivaldría a cada hora o un asterisco en el campo del mes equivaldría a cada mes.
- el nombre de usuario es opcional (disponible solo si es el archivo crontab del sistema)
Ejemplos:
Entendamos la sintaxis anterior con algunos ejemplos.
1. Programe un cron para que se ejecute a las 5 a.m. todos los días
0 5 * * * /scripts/job.sh2. Programe un cron para que se ejecute dos veces al día a las 6 a. m. y a las 6 p. m.
0 6,18 * * * /scripts/job.sh3. Programe un cron para que se ejecute cada minuto
* * * * * /scripts/job.sh4. Programe un cron para que se ejecute todos los lunes a las 7 p. m.
0 19 * * mon /scripts/job.sh5. Programe un cron para que se ejecute cada 15 minutos.
*/10 * * * * /scripts/job.sh6. 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.sh8. Programe un cron para que se ejecute cada 30 segundos
Dado que no tenemos control sobre los segundos en Crontab, podemos lograrlo a través del siguiente proceso de dos pasos.
- Primero programemos una tarea que se ejecute cada minuto.
* * * * * /home/scripts/script.sh- Ahora usemos el comando de
sleeppara pausar la ejecución durante 30 segundos.
* * * * * sleep 30; /home/scripts/script.shLa tarea anterior detendrá la ejecución durante 30 segundos y se reanudará nuevamente.
Tipo de archivos de configuración de Cron
Hay dos tipos de archivos de configuración de Cron:
Crontab del sistema UNIX/Linux
Esto requiere privilegios de root porque generalmente se usa para servicios del sistema y trabajos críticos. El sexto campo (en la descripción de sintaxis anterior) es el nombre de un usuario para ejecutar el comando. Da la capacidad al crontab del sistema para ejecutar comandos como cualquier usuario.
El crontab de usuario
Un usuario también puede instalar sus propios trabajos cron usando el comando crontab. Aquí también, el sexto campo (en la descripción de 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 estos son archivos en /var/spool/cron/ crontabs, no están destinados a ser editados directamente. Necesitamos usar el comando crontab para editar o configurar nuestros propios trabajos cron.
¿Como funciona?
El servicio cron (daemon) se ejecuta en segundo plano y comprueba constantemente (cada minuto) el /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 minutos, horas y meses 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 trabajos cron existentes
Podemos enumerar todos los trabajos de Cron sin abrir el archivo de configuración crontab usando el siguiente comando
crontab -lSi no hay un trabajo existente, devolverá la salida como
[geekflare@localhost ~]# crontab -l no crontab for geekflare [geekflare@localhost ~]#Si el usuario ya ha agregado algunos de los trabajos, se mostrará de la siguiente manera.
[geekflare@localhost ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 am every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # mh dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [geekflare@localhost ~]#La tabla cron es específica del usuario, lo que significa que debe iniciar sesión con un usuario específico para ver la lista de tablas cron.
Listar Cron para un usuario particular
Para enumerar los trabajos programados de otro usuario, use la opción como -u ( Usuario ) y -l ( Lista ).
crontab -u another_username -l
Ejemplo : crontab -u geekflare -l
Agregar/Modificar Entradas Crontab
Para editar la entrada crontab, podemos usar la opción -e como se muestra a continuación.
crontab -e

El comando anterior abrirá los editores vi donde especifica los detalles del trabajo y guarda el archivo. Una vez guardado, puedes verificar si cron está configurado o no con crontab -l .
Agregar/Modificar Entradas Crontab para un Usuario Particular
Podemos editar el crontab para otro usuario usando el siguiente comando
crontab -u another_username -e Ejemplo : crontab -u geekflare -e
Eliminar entrada Crontab
Use 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 los trabajos programados, use la opción <strong>-i</strong> con -r , que solicitará la confirmación del usuario antes de eliminar el crontab del usuario.
crontab -i -r [geekflare@localhost ~]# crontab -i -r crontab: really delete geekflare's crontab?Cadena especial Crontab
Además de la sintaxis anterior que discutimos, también podemos usar ocho cadenas especiales proporcionadas por Crontab. No solo nos ahorrará tiempo, sino que también mejorará la legibilidad.
| Cuerda especial | Descripción |
@reboot | Ejecutar una vez, después del inicio. |
@yearly | Ejecutar una vez al año, es decir, 0 0 1 1 * |
@annually | Igual que @yearly |
@monthly | Ejecutar una vez al mes, es decir, 0 0 1 * * |
@weekly | Ejecutar una vez a la semana, es decir, 0 0 * * 0 |
@daily | Ejecutar una vez al día, es decir, 0 0 * * * |
@midnight | Igual que @daily |
@hourly | Ejecutar una vez por hora, es decir, 0 * * * * |
Ejemplos de cadenas especiales Crontab
1. Crontab para programar tareas de forma anual
@yearly /scripts/greeting.sh
Podemos ejecutar arriba uno para enviar un saludo de año nuevo, se ejecutará en el primer minuto de cada año.
2. Crontab para programar tareas para ejecutar mensualmente.
@monthly /scripts/cleanup.sh
Podemos ejecutar el anterior para realizar algunas actividades de limpieza al comienzo de cada mes.
De manera similar, podemos usar otra cadena especial de Crontab para propósitos semanales, diarios y por horas.
Directorio cron
El administrador del sistema puede usar 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.por hora
- /etc/cron.mensual
- /etc/cron.weekly
Ejemplos de crontab en tiempo real
Analicemos algunos de los ejemplos en tiempo real que suelen utilizar un administrador de sistemas o profesionales de TI.
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 00:45 todos los días. Necesitamos mencionar el nombre de usuario para realizar este trabajo. En el ejemplo anterior, el usuario de geekflare está realizando una operación de trabajo cron.
Ejecute múltiples tareas usando un solo cron
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Varias tareas/trabajos se pueden separar usando un punto y coma ( ; ) y se pueden asignar a una sola expresión cron.
Herramientas de formateo y prueba de cron
Hasta ahora discutimos los comandos y la sintaxis de crontab para programar una tarea. Pero, ¿qué sucede si no es un administrador del sistema y su trabajo no es configurar Cron con regularidad? Es posible que no sea posible recordar la sintaxis y abre la posibilidad de error. No te preocupes, tenemos una solución a este problema.
Hay varias herramientas de formateo de Cron disponibles en línea.
# 1. Generador de trabajos cron
Cron Job Generator es una GUI muy fácil de usar donde puede especificar los minutos, los días y la ruta del script para generar crontab.
Tomemos un ejemplo en tiempo real en el que tengo que ejecutar /home/processMonitor.sh cada 5 minutos de lunes a viernes.

Entonces, obtuve la siguiente sintaxis de 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. Easycron
Easycron es un útil programador de trabajos cron basado en la web. Podemos crear un trabajo cron especificando una URL para llamar , podemos establecer la hora en que debe ejecutarse. También podemos especificar una expresión cron o agregarla manualmente desde un formulario descriptivo. Es importante destacar que, opcionalmente, podemos usar la autenticación HTTP básica para una pequeña capa de seguridad.

No solo esto, sino que Easycron también se puede usar para lograr otros propósitos, como la expresión estándar de Cron, los registros de ejecución de trabajos de Cron, la notificación por correo electrónico, los registros de fallas separados, etc.
# 3. Generador Crontab
Crontab Generator es otra herramienta útil para generar crontab y con esta herramienta, también puede agregar si desea guardar la salida cron en el archivo o enviarla por correo electrónico.

# 4. Crontab Gurú
Crontab Guru es un simple editor de expresiones de programación cron en línea. Además, proporciona un medio útil para monitorear su cronjob. Todo lo que tenemos que hacer es copiar un comando provisto y agregarlo al final de la definición de crontab. En caso de que el trabajo cron falle o ni siquiera se inicie, recibirá un correo electrónico de alerta.
En el siguiente ejemplo, Job se ejecutará a las 04:05 , todos los días, todos los meses y todas las semanas.

# 5. Probador CRON
CRON Tester nos permite probar las definiciones de hora/fecha del cron. Puede haber una situación en la que tengamos que decodificar la sintaxis cron existente para solucionar problemas o simplemente queramos hacer una prueba.
Para ello, podemos utilizar esta herramienta. Todo lo que tenemos que hacer es copiar y pegar nuestra expresión cron en el campo de definición de cron, luego elegir el número de iteraciones y hacer clic en Probar para ver las distintas fechas en las que se ejecutará.
Revisemos una de nuestras expresiones cron 4 3 */2 * * que debería ejecutarse a las 03:04 (AM) cada dos días. Vamos a verificarlo con cron tester.

Conclusión
Espero que lo anterior lo ayude a comprender mejor Crontab y configurar trabajos cron. La programación de trabajos a través de Cron es una de las muchas tareas realizadas por el administrador de Linux. Si está interesado en aprender las habilidades avanzadas, consulte este curso.
