Programa tareas automáticas con Crontab

Crontab Logo PNG

En esta ocasión vamos a aprender a programar tareas automáticas con Crontab, un fantástico programador de tareas que utiliza al demonio Cron para ejecutarlas.

 

Empecemos por el principio, ¿Qué es Crontab?

Podríamos decir que Crontab es el archivo de configuración del demonio Cron. Crontab es un archivo de texto en el que, siguiendo unos parámetros, escribes específicamente cuándo quieres que se ejecute cierto comando, y, después, escribes el comando. Hay que tener en cuenta que crontab verificará los permisos de ejecución si lo que le estamos pidiendo es que ejecute un script. Cada usuario tiene su archivo Crontab. Se podría decir que Crontab es la forma más sencilla de automatizar tareas utilizando el demonio Cron.

 

Crontab Logo PNG 

 

¿Qué es el demonio Cron?

En primer lugar, ¿Qué es un demonio? Pues bien, lejos de ser aquella criatura que todos nos estamos imaginando, es un proceso que está en constante ejecución y que no se cierra, es decir, si intentamos cerrar un proceso que es un demonio, el proceso se volverá a abrir. Podríamos decir que son procesos “imbatibles”, que siempre se están ejecutando y no se pueden matar. La palabra demonio proviene de la inglesa “daemon“.

 

¿Qué podemos hacer con Crontab?

Lo mejor de Crontab (Y de Linux, en general) es que el límite lo pone tu imaginación. Crontab tiene múltiples usos, se puede usar perfectamente para programar un script que haga una copia de seguridad en cierto dispositivo, como también se puede usar para automatizar actualizaciones del sistema. También se podría usar para apagar el PC a una hora determinada, o, por ejemplo, para programar un cambio de fondo de escritorio, como tengo hecho yo con un Script. Como ya he dicho anteriormente, el límite lo pone tu imaginación, las posibilidades son infinitas. Al final del artículo pondré una lista de ejemplos de uso muy prácticos que seguro que te sirven 😉

 

Todo muy bonito.. Pero, ¿Cómo se utiliza?

Bien, no te preocupes que, aunque Crontab se gestiona por la terminal, no es difícil de usar una vez te memorizas su Sintaxis. Lo primero que tenemos que saber, es que para abrir Crontab, tenemos que escribir en la terminal: crontab -e. Ahí editaremos nuestro archivo de configuración Crontab. Importante: Si queremos que al escribir crontab -e se nos abra con nuestro editor favorito, debemos exportar la variable. Si quieres abrir Crontab con nano por ejemplo, debes escribir: export EDITOR='nano' y después de eso, escribimos crontab -e.
Bien, como podréis ver, tenemos un archivo de configuración vacío. Vamos a comprender su sintaxis antes que nada.
En Crontab, podemos especificar un tiempo muy específico, desde el minuto de ejecución hasta el día de la semana.

50 * * * * sh /home/kevin/bin/Script.sh 
Analicemos la sintaxis.

50 – Este carácter representa el minuto en el que queremos que se ejecute nuestro comando
* – Este carácter, representa la hora a la que queremos que se ejecute el comando. Un asterisco significa “siempre”. Si ponemos un número del 0 al 23, se ejecutará al a hora y al minuto indicado.
* – Este carácter hace referencia al día del mes que queremos que se ejecute. Si ponemos un asterisco, se ejecutará todos los días del mes. Si ponemos un número del 1 al 31, se ejecutará el día especificado.
* – Este carácter hace referencia al mes. Si ponemos un asterisco, se ejecutará todos los meses, si ponemos un número del 1 al 12, se ejecutará solo en el mes al que corresponda el número.
* – Este carácter hace referencia al día de la semana. Si ponemos un asterisco, será todos los días de la semana. Si ponemos un número del 0 al 6 (siendo el 0 Lunes), se ejecutará solo el día indicado siempre y cuando cumpla con los parámetros anteriores. 

Cómo usar Crontab
“Chuleta” de Crontab elaborada por tecmint

 

Ahora, pongamos un ejemplo de uso:

30 00 15 sh /home/kevin/Backup.sh

Aquí estamos diciéndole a Cron que el día 15 de cada mes sea el día de la semana que sea a las 0030 minutos se ejecute el script Backup.sh

Fácil, ¿No?

Imaginemos que trabajamos en una empresa y se nos pide que creemos una copia de seguridad todos los días a las 6 de la mañana. Lo haríamos de la siguiente manera:

30 00 15 sh /home/kevin/BackupServidor.sh

 Como habréis podido comprobar, jugando con la sintaxis de Crontab, podemos hacer que se ejecute cierto comando en un momento muy preciso.

También me gustaría mencionar, que hay carácteres especiales, los cuales explicaré más abajo. 

Para entenderlo más fácil

min ds comando

min de minuto (0-59)
h de hora (0-23)
d de día (1-31)
m de mes (1-12)
d de día de la semana (0-6)

Aclarar que el comando no necesariamente ha de ser siempre sh para ejecutar un script, también puede ser un comando como por ejemplo, el de actualizar (En el caso de archlinux, pacman -Syu –noconfirm).

Si queremos ver qué tenemos en nuestro archivo Crontab, podemos escribir crontab -l

 

¿Cómo darle permisos de ejecución a un Script?

Muy fácil, para poder añadir un Script a crontab debe tener permisos de ejecución. Supongamos que el script es nuestro, por tanto nosotros somos el dueño del archivo. Para darle permisos de ejecución, solo habría que escribir: chmod u+x script.sh, reemplazando script.sh por el nombre de nuestro script.
Si nuestro script no tiene permisos de ejecución, no se ejecutará.

 

Rangos especiales de Crontab

La sintaxis de Crontab permite muchas opciones, no solo asteriscos y números, son conocidos como los rangos especiales, vamos a ver cuáles son:

En Crontab, podemos utilizar la barra (/) para referirnos a “cada cierto tiempo“, es decir:

/30 sh /home/kevin/BackupServidor.sh

Eso quiere decir que cada treinta minutos se ejecutará el script.

 

Si queremos que nuestro comando se ejecute varios días y no solo uno, podemos separar los días que queremos que se ejecute por comas, ejemplo:

/30 15,20,25,30 sh /home/kevin/BackupServidor.sh

Eso nos está diciendo que los días 15, 20, 25 y 30 se ejecutará el comando cada media hora. Este rango lo podemos utilizar ya sea en el carácter de minutos, horas, días, meses o días de la semana.

 

Y por último, las famosas cadenas especiales de Crontab, la cual nos facilitarán mucho su uso.

@reboot – El comando se ejecuta cada vez que inicia el sistema
@yearly – El comando se ejecuta una vez al año (El 1 de enero a las 00:00)
@monthly – El comando se ejecuta una vez al mes (El día 1 de cada mes a las 00:00)
@weekly – El comando se ejecuta una vez a la semana (Todos los domingos a las 00:00)
@daily – El comando se ejecuta diariamente (Todos los días a las 00:00)
@hourly – El comando se ejecuta cada hora (Todas las horas a en punto)

Veamos un ejemplo de uso.
@daily sh /home/kevin/script.sh

Este script se ejecutaría todos los días a las 00:00.

 

¡Extra!

Si quieres enterarte mejor de cómo utilizar Crontab pero prefieres ver un vídeo explicativo, aquí te dejo un vídeo de mi canal de Youtube en el que lo explico con pelos y señales.
Debajo del vídeo, dejaré unos ejemplos prácticos de uso de Crontab.

Me gustaría aclarar que en el vídeo cometo un error al escribir sudo pacman -Syu –noconfirm desde mi usuario. Si vas a usar un comando que requiere permisos de root, necesitas programarlo en el crontab del root, ya que si no te pedirá la contraseña y, al ejecutarse en segundo plano, no podrás introducirla.

 

Ejemplos prácticos de uso

Programar una copia de seguridad todos los días a las 00:00: @daily sh /home/kevin/Backup.sh

Programar una copia de seguridad a las 6:30 AM sólo los Lunes: 30 6 * * 1 sh /home/kevin/Backup.sh

Programar actualizaciones del sistema (desde el usuario root) todas las semanas: @weekly pacman -Syu --noconfirm

 

Y hasta aquí el tutorial. Personalmente, uso Crontab en mi día a día para ejecutar varios scripts cada X tiempo, como por ejemplo, utilizo Crontab para cambiar mi fondo de escritorio cada 30 minutos ejecutando un script .sh, también solía utilizarlo para programar actualizaciones diarias. Ahora que sabéis utilizar Crontab, ¿Para qué vais a utilizar Crontab?

About Kevin 26 Articles
Fanático de Linux ante todo. Técnico en Sistemas Microinformáticos y redes. Soy curioso por naturaleza, me gusta investigar sobre aquello que no sé, en especial sobre tecnología. La sabiduría es poder.

Be the first to comment

Leave a Reply

Tu dirección de correo no será publicada.


*