Crontab en Linux: con ejemplos y herramientas en tiempo real

Exploremos 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.

Tabla de contenido

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.

  Cómo usar PlayOnLinux para jugar juegos de Windows en Linux

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:

  • 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.

0 5 * * * /scripts/job.sh

1. Programe un cron para que se ejecute a las 5 a.m. todos los días

0 6,18 * * * /scripts/job.sh

2. Programe un cron para que se ejecute dos veces al día a las 6 a. m. y a las 6 p. m.

* * * * * /scripts/job.sh

3. Programe un cron para que se ejecute cada minuto

0 19 * * mon /scripts/job.sh

4. Programe un cron para que se ejecute todos los lunes a las 7 p. m.

*/10 * * * * /scripts/job.sh

5. Programe un cron para que se ejecute cada 15 minutos.

* * * feb,jun,oct * /script/job.sh

6. Programe un cron para que se ejecute en los meses seleccionados

25 7 4 3 * /home/script/backup.sh

7. Ejecute el script de shell /home/script/backup.sh el 4 de marzo a las 7:25 a. m.

8. 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.
* * * * * /home/scripts/script.sh
  • Primero programemos una tarea que se ejecute cada minuto.
* * * * * sleep 30; /home/scripts/script.sh

Ahora usemos el comando de suspensión para pausar la ejecución durante 30 segundos.

La tarea anterior detendrá la ejecución durante 30 segundos y se reanudará nuevamente.

Tipo de archivos de configuración de Cron

  Cómo instalar el reproductor de música en la nube Olivia en Linux

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 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 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

crontab -l

Podemos enumerar todos los trabajos de Cron sin abrir el archivo de configuración crontab usando el siguiente comando

[[email protected] ~]# crontab -l
no crontab for kirukiru.es
[[email protected] ~]#

Si no hay un trabajo existente, devolverá la salida como

[[email protected] ~]# 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 a.m 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)
#
# m h  dom mon dow   command
0 */1 * * * /home/account/scripts/updateAccountStatuses.sh
0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh
[[email protected] ~]#

Si el usuario ya ha agregado algunos de los trabajos, se mostrará de la siguiente manera.

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 otro_nombre_de_usuario -l

Ejemplo: crontab -u kirukiru.es -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, puede verificar si cron está configurado o no con crontab -l.

Agregar/Modificar Entradas Crontab para un Usuario Particular

crontab -u another_username -e

Podemos editar el crontab para otro usuario usando el siguiente comando

  4 Mejor Chromebook para Linux en 2020 (Reseñas)

Ejemplo: crontab -u kirukiru.es -e

Eliminar entrada Crontab

Use el parámetro -r con Crontab para eliminar trabajos programados completos sin confirmación de crontab

crontab -r

crontab -i -r
[[email protected] ~]# crontab -i -r
crontab: really delete kirukiru.es's crontab?

Si desea confirmación antes de eliminar los trabajos programados, use la opción -i con -r, que solicitará la confirmación del usuario antes de eliminar el crontab del usuario.

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
@reiniciar
Ejecutar una vez, después del inicio.
@anual
Ejecutar una vez al año, es decir, 0 0 1 1 *
@anualmente
Igual que @anual
@mensual
Ejecutar una vez al mes, es decir, 0 0 1 * *
@semanalmente
Ejecutar una vez a la semana, es decir, 0 0 * * 0
@diariamente
Ejecutar una vez al día, es decir, 0 0 * * *
@doce de la noche
Igual que @daily
@cada hora

Ejecutar una vez por hora, es decir, 0 * * * *

Ejemplos de cadenas especiales Crontab

1. Crontab para programar tareas de forma anual

@anual /scripts/saludo.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.

@mensual /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 * * * kirukiru.es encontrar /tmp -tipo f -vacío -eliminar

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 kirukiru.es está realizando una operación de trabajo cron.

Ejecute múltiples tareas usando un solo cron

* * * * * /home/scripts/backup.sh; /home/scripts/scriptp.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 Generador de trabajos cron

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 Generador de Crontab

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 Gurú

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 Probador CRON

nos permite probar las definiciones de hora/fecha de 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 estecurso

.