Estas dos herramientas o comandos son los encargados de que se puedan automatizar tareas y que se hagan en una hora especifica en los días que se le indiquen. En Windows existe algo similar llamado programador de tareas. En este caso no es con una interfaz grafica, es todo desde la consola y es mucho mas confiable, además de que aquí se le llaman Jobs a las tareas que se van a ejecutar.
Diferencias entre Cron y Crontab
Aunque pueda parecer que estamos hablando de lo mismo, no es así, y se podrían considerar dos elementos dependientes uno del otro. Para ser más claros, son los encargados de que la programación de tareas en sistemas Linux sea posible.
Que es Cron
Es un demonio (proceso en segundo plano) que se ejecuta desde el mismo instante en el que arranca el sistema. Comprueba si existe alguna tarea (job) para ser ejecutado de acuerdo a la hora configurada en el sistema. Muy importante que la zona horaria esté bien configurada ya que de lo contrario las ejecuciones puede que no coincidan con los ajustado.
En función de la distribución, se inicia utilizando las carpetas /etc/rc.d/ o /etc/init.d y cada minuto comprueba los ficheros /etc/crontab o /var/spool/cron es busca de posibles ejecuciones
Que es Crontab
Un archivo de texto. Por simple que parezca la definición es así. Aunque es verdad que se trata de un archivo con contenido especial. Posee una lista con todos los scripts a ejecutar. Generalmente cada usuario del sistema posee su propio fichero Crontab. Se considera que el ubicado en la carpeta etc pertenece al usuario root.
Para generar el archivo propio, cada usuario deberá hacer uso del comando crontab (sí, es el mismo nombre).
Agregando tareas a crontab
Partiendo de que podemos ejecutar tareas, en primer lugar, vamos a configurar un script muy sencillo que llamaremos consulta.sh:
#!/bin/bash
#script de ejemplo
sudo ls -l / > archivoResultado
Y se cambian los permisos
chmod ugo+x consulta.sh
Este aspecto es muy importante, ya que de lo contrario el comando nunca será ejecutado.
Ha llegado el momento de editar el fichero que posee las tareas. Para ello nos vamos a ayudar del comando crontab -e. Nos encontramos la siguiente estructura:
5 asteriscos y el comando a ejecutar. Cada uno de los 5 asteriscos significa:
Lo valores que pueden adoptar cada una de estas variables se encuentran en la imagen. Por ejemplo, en el caso del último, se permite la utilización del nombre de los días escritos en inglés.
Aunque en la imagen anterior no aparezca, es necesario indicar entre el comando y el último asterisco (el día) el propietario del archivo.
Para que quede todo claro, vamos a utilizar algunos ejemplos:
Ejecutar todos los días a las 7 de la tarde
00 19 * * * usuario /ubicacion/del/script/consulta.sh
Ejecutar todos los domingos a las 7 de la tarde:
00 19 * * 0 usuario /ubicacion/del/script/consulta.sh
Ejecutar el script todos los 4 de febrero a las 7 de la tarde:
00 1942 * usuario /ubicacion/del/script/consulta.sh
Hay que decir que en Linux existen algunas cadenas de texto reservadas para ejecutar procesos durante determinados periodos:
Aunque os hemos puesto cuál sería el formato, al hacer uso de crontab -e se pueden utilizar estos términos para definir el periodo.