Saltar al contenido

Crontab, programando tareas en Linux

En los sistemas operativos basados en Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab. El nombre cron viene del griego chronos (χρόνος) que significa «tiempo».

Cron se podría definir como el «equivalente» a Tareas Programadas de Windows.

Crontab es la manera mas sencilla de administrar tareas de cron en sistemas multiusuario, ya sea como simple usuario de sistema o usuario root.

Para agregar, quitar o modificar tareas, hay que editar el fichero crontab. Esto se hace con la orden crontab -e, que abrirá el editor definido en la variable de entorno EDITOR y cargará el fichero crontab correspondiente al usuario que está logueado.

Por tanto, Crontab es básicamente un fichero de texto que contiene una lista con todos los scripts y tareas a ejecutar. Or lo general, cada usuario del sistema posee su propio fichero Crontab. Se considera que el ubicado en la carpeta etc pertenece al usuario root.

Podemos elegir el editor con el que queremos abrir el fichero crontab utilizando en consola el siguiente comando:

export EDITOR=”vim” o export EDITOR=”nano”

Si queremos ver los crontab que tenemos programados lo podemos hacer con crontab -l

crontab1

Podemos observar que en mi caso aun no hay ninguna tarea programada.

Veamos como se puede programar una tarea para lo que vamos a usar el comando crontab -e para editar el fichero.

Si previamente no hemos elegido el editor que vamos a utilizar, como hemos indicado antes, nos pedirá que elijamos uno. En mi caso elegiré nano:

crontab2

Ahora nos desplazaremos al final para empezar a editarlo:

crontab3

En este punto tenemos que tener clara cual es la sintaxis básica que se puede entender muy fácilmente en con este cuadro:

crontab4

Donde el primer asterisco corresponde a los minutos, el segundo a la hora, el tercero al día del mes y el cuarto al día de la semana teniendo en cuenta que el 0 corresponde al domingo. A continuación se pone el comando a ejecutar.

Si queremos que una tarea se ejecute todos los días a las 12 de la noche la estructura sería:

00 00 * * * ComandoTarea

Donde estamos indicando que a los 00 minutos de la hora 00 (es decir, a las doce de la noche) de todos los días del mes, de todos los meses y de todos los días de la semana se ejecutará la tarea que indiquemos. Esto quiere decir que el * es el comodín para indicar que sea todas las opciones de ese rango.

Si lo que queremos es que todos los días a las doce dela noche se actualice el sistema tendríamos que poner:

00 00 * * * root apt-get update && apt-get -y upgrade

Crontab pude manejar cadenas especiales para definir los rangos:

@reboot Ejecuta una vez, al inicio
@yearly ejecuta sólo una vez al año.
@annually que es igual que @yearly
@monthly ejecuta una vez al mes, el día primero.
@weekly Semanal, es decir, el primer minuto de la primer hora de la semana.
@daily diario, a las 12:00 am
@midnight que es igual que @daily
@hourly en el primer minuto de cada hora

Por tanto, la abreviatura para la tarea indicada anteriormente sería:

@daily root apt-get update && apt-get -y upgrade

Si por ejemplo queremos llevar un registro de la fecha y hora en la que se inicia nuestro equipo y lo guarde en un archivo que podríamos llamar “inicios.txt” deberíamos poner:

@reboot date >> /home/jose/inicios.txt

crontab5

y lo guardaremos con ctrl+O

De esta manera podemos saber si nuestro equipo ha sido iniciado cuando nosotros no estamos:

crontab6

Este programador de tareas es muy potente si lo usamos con scripts.

Una vez que hemos creado un script deberemos darle permisos para que pueda ejecutarse y lo haremos mediante:

chmod ugo+x script.sh

Es muy importante hacerlo ya que si no lo hacemos nunca se ejecutará.

La cadena que tendríamos que poner para ejecutar dicho script por ejemplo a las 5 de la tarde todos los días sería:

00 17 * * * sh /Ruta/Ubicación/Del/Script/script.sh

Podemos borrar el Crontab programado con el comando crontab -r

Si a pesar de ser un procedimiento muy sencillo no terminas de aclararte puedes utilizar una herramienta online para ayudarte en el proceso de generar tus crontab con:

https://crontab-generator.org/

Etiquetas: