Cómo usar Crontab para automatizar tareas repetitivas en Linux

Aproveche el comando crontab de Linux para automatizar varias tareas mundanas y repetitivas, simplificando su vida. Esta herramienta excelente y fácil de usar, combinada con algunas secuencias de comandos, no solo puede automatizar todo tipo de tareas, sino que también puede ayudar a evitar simples errores humanos o olvidos.

Aquí aprenderá qué es crontab, cómo agregar trabajos automatizados y algunos ejemplos del mundo real.

¿Qué es Crontab?

Crontab es un proceso demonio que se ejecuta en segundo plano en casi todas las máquinas Linux y se utiliza para programar y ejecutar tareas automatizadas en intervalos de tiempo establecidos. Los desarrolladores de software también lo utilizan a menudo para ejecutar tareas que requieren mucho tiempo en segundo plano.

Esto puede ser cualquier cosa, incluido, entre otros, el envío de correos electrónicos por lotes, la verificación de su cuenta de Twitter, la realización de copias de seguridad o simplemente la realización de un recordatorio.

Comandos básicos de Crontab

Cada usuario de Linux en la máquina tiene su propio archivo crontab, que contiene sus trabajos crontab activos. Aquí hay algunos comandos de terminal básicos que usará para ver y modificar el archivo crontab:

  • crontab-l — Lista todos los trabajos crontab.
  • crontab -e — Edita el archivo crontab.
  • crontab -r — Elimina todas las entradas del archivo crontab.

Los comandos anteriores serán para el archivo crontab del usuario actual . Si necesita modificar el archivo crontab de un usuario diferente, simplemente use la opción -u . Por ejemplo, puede modificar el archivo crontab del usuario jperez con el comando:

 sudo crontab -ujdoe -e

Formato de trabajos de Crontab

Cada trabajo crontab consta de una línea y tiene el siguiente formato:

 MINUTE HOUR DAY MONTH WEEKDAY COMMAND

La siguiente tabla explica los diferentes elementos del trabajo crontab:

Elemento Rango Descripción
Minuto 0 – 59 El minuto para ejecutar el trabajo crontab en.
Hora 0 – 23 La hora a la que se ejecutará el trabajo crontab.
Día 1 – 31 El día del mes en el que se ejecutará el trabajo crontab.
Mes 1 – 12 El mes en el que se ejecutará el trabajo crontab.
Día laborable 0 – 6 El día de la semana en el que se ejecutará el trabajo crontab.
Mando Cualquier comando de Linux que pueda ejecutar en la terminal.

Puede usar un asterisco (*) en cualquiera de los campos para indicar un comodín, lo que significa que el trabajo crontab se ejecutará independientemente de ese período de tiempo. Por ejemplo, el trabajo crontab siguiente se ejecutará todas las noches exactamente a las 3:20 am:

 20 3 * * * /root/backup.sh

Valores múltiples

Cada período de tiempo también puede incluir múltiples elementos. Puede especificar los valores exactos separándolos con una coma, y ​​el trabajo crontab a continuación se ejecutará cada hora a los 20 y 50 minutos después de la hora:

 20,50 * * * * /path/to/command.sh

Sin embargo, si desea ejecutar el trabajo crontab a intervalos específicos dentro de un período de tiempo, puede usar * / PERIOD , y el trabajo crontab siguiente se ejecutará automáticamente a los 15 minutos después de la hora cada tres horas:

 15 */3 * * * /path/to/command.sh

Mantener Crontab Jobs en silencio

Dependiendo de todo, es posible que desee eliminar todos los resultados de los trabajos crontab para que no terminen en la carpeta de correo de su sistema. Puede hacer esto agregando > / dev / null 2> & 1 a cualquier trabajo crontab. Por ejemplo:

 0 6 15 * * /path/to/backup.sh > /dev/null 2>&1

Adición de trabajos de Crontab

Generalmente, el método más utilizado para agregar o modificar trabajos crontab es el comando crontab -e . Ejecute este comando en la terminal:

 crontab -e

Esto abrirá un editor de texto como nano con el contenido de su archivo crontab. Cada trabajo crontab reside en una línea y puede agregar, modificar y eliminar líneas como desee. Una vez hecho esto, guarde y cierre el archivo presionando Ctrl + W , seguido de las teclas Y y Enter , que activarán inmediatamente todos los trabajos crontab dentro del archivo.

Acceso directo para agregar trabajos

En lugar de modificar manualmente el archivo crontab, hay un comando único rápido que puede ejecutar para agregar un trabajo. Por ejemplo, si desea agregar este trabajo crontab que se ejecuta todos los domingos a las 2:00 pm:

 0 14 * * 0 /path/to/command.sh

Puede agregar el trabajo a su archivo crontab con el comando único:

 (crontab -l; echo "0 14 * * 0 /path/to/command.sh";) | crontab

El comando anterior simplemente enumera todos los trabajos que se encuentran actualmente en su archivo crontab, imprime el nuevo trabajo y canaliza todo en crontab reemplazando su contenido.

Listado / Eliminación de archivo Crontab

Puede enumerar todos los trabajos actualmente activos dentro de su archivo crontab con el comando:

 crontab -l

También puede eliminar todos los trabajos crontab y vaciar el contenido de su archivo crontab con el comando:

 crontab -r

Ejemplo: ¡Reproducir sonidos!

¿Necesita un recordatorio rápido cada dos horas mientras trabaja para informarle que ha pasado el tiempo? Coge tu clip de audio favorito en casi cualquier formato (.wav, .mp4, cualquier cosa) y, si está guardado en (por ejemplo) /home/myuser/myalert.wav, haz que se reproduzca automáticamente con el trabajo crontab:

 0 */2 * * * aplay /home/myuser/myalert.wav

¿Qué tal darte una buena despedida del trabajo de la semana con tu canción favorita reproduciéndose automáticamente a las 5:00 pm todos los viernes por la tarde? Toma tu clip de canción favorita y, si lo guardas en, digamos, /home/myuser/friday_song.mp4 , agregarías el trabajo crontab:

 0 17 * * 5 aplay /home/myuser/friday_song.mp4

Ejemplo: archivos de copia de seguridad con Rsync

Uno de los muchos usos excelentes de crontab es la capacidad de respaldar automáticamente sus archivos en un servidor remoto. Reduzca sustancialmente el riesgo de volver a perder datos importantes con este excelente tutorial de rsync .

Ejemplo: comprobar si los sitios están en línea

Tal vez desee verificar automáticamente cada cinco minutos si varios sitios están en línea y recibir una notificación por correo electrónico si alguno está inactivo. Aquí hay un pequeño script PHP ingenioso que hará precisamente eso.

 
<?php
// E-mail address to notify of sites down
$email = '[email protected]';
// Define URLs to check
$urls = [
'https://apexpl.io',
'https://google.com',
'https://some-junk-site-that-will-hopefully-never-exist.com'
];
// Go through URLs
$down = [];
foreach ($urls as $url) {
// Check URL
$status = check_url($url);
if ($status != 200) {
$down[] = $url;
}
}
// Send e-mail if we have down sites
if (count($down) > 0) {
mail($email, "Urgent - Sites Down!", "Your bot has detected the following sites are currently down:
" . implode("
", $down));
}
// Exit
exit(0);

/**
* Check URL
*/
function check_url(string $url):int
{
// Send via cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
// Get status, and close connection
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Return
return $status;
}

Simplemente modifique la dirección de correo electrónico y las URL deseadas para verificar en la parte superior del archivo y guárdelo en algún lugar como /home/myuser/check_sites.php . Para que este script se ejecute cada cinco minutos y le notifique por correo electrónico sobre cualquier sitio que esté inactivo, agregue el trabajo crontab:

 */5 * * * * /usr/bin/php /home/myuser/check_sites.php > /dev/null 2>&1

¡Automatiza tu vida!

Con este artículo, es de esperar que haya entendido el poder de automatización de crontab y cómo se puede utilizar para automatizar muchas de las tareas mundanas y repetitivas de su vida.

Ha aprendido qué es crontab, sobre el archivo crontab, cómo se formatean los trabajos crontab y algunos ejemplos del mundo real de cómo se puede utilizar.