Realizar las mismas tareas una y otra vez, ya sea de forma diaria, semanal o mensual, es una labor que, con el tiempo cansa y degenera, según la complejidad de esta, en que la vayamos dejando de lado. La solución a este problema pasa por automatizarla en la medida de lo posible. Al igual que Windows nos permite automatizar ciertas tareas, Linux también nos ofrece esta opción a través de Crontab, pero no exclusivamente.
Si queremos automatizar el funcionamiento de Linux, ya sea para hacer una copia de seguridad, para generar informes, para modificar la configuración o para cualquier otra cosa, la solución pasa por utilizar Crontab en combinación con Cron, ya que, a diferencia de Windows, necesitamos dos aplicaciones como mínimo.
Qué es Crontab
Crontab es un archivo de texto donde se crean las automatizaciones en base de una serie de parámetros, archivo de texto que es leído por Cron. Ambas aplicaciones están disponibles de forma nativa en la mayoría de las distribuciones Linux más habituales, por lo que no es necesario instalar ningún repositorio en nuestro equipo para poder utilizarlas.
Crontab pone a nuestra disposición una serie de scripts, uno por línea, que nos permite personalizar el tiempo exacto en el que queremos realizar una o múltiples tareas y sus repeticiones en el tiempo. De hecho, su nombre deriva de la palabra griega Cronos, que significa tiempo. Cada script contiene información sobre la fecha exacta en la que debe ejecutarse, fecha que se indica a través de una serie de números. Para muestra, un botón. El siguiente script, ejecutará nfsfind todos los domingos a las 5:30 de la mañana
30 5 * * 0 /usr/lib/fs/nfs/nfsfind
Los dos primeros números representa la hora en la que se ejecutará el comando, siendo el primer número del minuto y el segundo las horas. El formato horario utilizado por Crontab es 24 horas, por lo que, si la tarea queremos realizar a las 5 de la tarde, en este sería el número 17. Los asteriscos representan todos los valores, mientras que el número 0 corresponde a los domingos.
No confundir Cron con Crontab
Mientras que Crontab nos permite realizar las automatizaciones de nuestro sistema, estas se ejecutan, aunque no exclusivamente, con la aplicación Cron, una aplicación que se ejecuta en segundo plano y que realiza todas las tareas que previamente hemos configurado en Crontab. Esta aplicación utiliza la hora de nuestro sistema para realizarlas, por lo que es importante, si hacemos uso de una máquina virtual, que tanto la hora de la máquina invitada como la de nuestro equipo sean siempre la misma, ya que, de lo contrario, la hora programa no será la correcta.
Cron lee el contenido del archivo Crontab cada minuto, por lo que podemos editarlo en cualquier momento para realizar tareas que queremos realizar en la misma sesión, sin necesidad de obligar a la aplicación a que lea nuevamente su contenido para buscar nuevos scripts que ejecutar.
No todos los usuarios tienen la posibilidad de crear archivos Crontab para automatizar labores del sistema. El administrador del sistema tiene la posibilidad de permitir o denegar esta opción a través del archivo cron.allow o cron.den respectivamente, archivos que se encuentra en /etc/cron.d o /etc/ dependiendo de la versión de la distribución Linux que tengamos instalada en nuestro equipo.
Cómo automatizar tareas en Linux
Como hemos comentado más arriba, los scripts de Crontab empiezan por la fecha en la que queremos que se ejecuten seguida del comando. La sintaxis de Crontab es la siguiente.
Gestión de la programación
minuto hora día-del-mes mes día-de-la-semana ruta-comandos
- Minuto, este puede ser de 0 a 59
- Hora, como hemos comentad Crontab utiliza el horario 24 horas, por lo que el rango de números es del 0 al 23.
- Día del mes, no hay mucho misterio, en este parámetro ya que va del 1 al 31.
- Mes, del 1 al 12
- 1 enero
- 2 febrero
- 3 marzo
- 4 abril
- 5 mayo
- 6 junio
- 7 julio
- 8 agosto
- 9 septiembre
- 10 octubre
- 11 noviembre
- 12 diciembre.
- Día de la semana, del 0 al 6, siendo el domingo el número 0 aunque algunas versiones de Crontab también permite utilizar el número 7. De esta forma, el código de los días de la semana es
- 0 domingo
- 1 lunes
- 2 martes
- 3 miércoles
- 4 jueves
- 5 viernes
- 6 sábado
Pero, además, también podemos utilizar el asterisco (*) para especificar todos los valores posibles de una variable. Si queremos establecer varios valores, podemos hacerlo a través de la coma (,) o un rango de valores separándolos con un guion (-). También podemos establecer diferentes pasos con “/”.
Si todavía no está muy claro, a continuación, os mostramos los códigos de tiempo que podemos utilizar para realizar tareas de forma periódica dependiendo de su periodicidad
- 0 * * * * Utilizando el código de tiempo, el script se ejecutará todas las horas en punto.
- 0 0 * * * Todos los días se ejecutará el script una única vez
- 0 0 * * 0 El script se ejecuta una vez a la semana
- 0 0 1 * * Se ejecutará una vez al mes
- 0 0 1 1 * El script se ejecutará una vez al año
Una vez tenemos claro cómo funciona la programación de tareas en Crontab, lo primero que vamos a hacer es crear el archivo donde vamos a crear todos los procesos que queremos automatizar utilizando el siguiente comando
crontab nombre-archivo
Si no queremos crear uno nuevo, o ya lo hemos creado y queremos editarlo, utilizamos este comando
crontab -e
Si queremos borrar el archivo Crontab creado
crontab -d
Con el siguiente comando, podemos listar todas las tareas incluidas en el archivo Crontab
crontab -d
Los administradores de sistemas pueden limitar el uso de las automatizaciones del sistema, editando los archivos cron.allow o cron.den, archivos que se encuentra en /etc/cron.d/ o /etc/ si no hemos modificado su ubicación previamente.
Automatizar tareas
Para editar el archivo Crontab que hemos creado, vamos a utilizar el editor de texto incluido en todas las distribuciones Linux, aunque también podemos editarlo directamente desde Crontab añadiendo la variable -e.
nano nombrearchivo
Introducimos el código numérico acompañado de asteriscos y el script que queremos ejecutar. A continuación, debemos darle los permisos a Cron para que pueda ejecutarlo, ya que, de lo contrario, no conocerá su existencia y nunca podrá ejecutarlo. Para hacerlo, utilizaremos el comando
chmod ugo+x nombrearchivo
Inicialmente, utilizar Crontab para automatizar tareas parece no resultar nada sencillo y recuerda a la necesidad (casi habitual) de Linux de recurrir a la línea de comandos para prácticamente todo, limitando así que más usuarios puedan adoptar Linux como sistema operativo en el día a día.
El programador de tareas de Windows utiliza una interfaz gráfica que, tampoco es que sea muy sencilla de utilizar sin los conocimientos necesarios, sin embargo, es mucho más intuitiva que la que nos ofrece Linux a través de la línea de comandos.
Ejemplo de funcionamiento de Crontab y Cron
Lo primero que debemos hacer para automatizar tareas en Linux es crear el archivo donde vamos a incluir todos los comandos que queremos que se ejecuten en el equipo a la hora en la que configuremos. En este ejemplo, vamos a crear el archivo «prueba» que se encargará de borrar todos los archivos y carpetas vacías que se encuentren en el directorio tmp. Para hacerlo, introduciremos el siguiente comando.
crontab prueba
A continuación, debemos introducir el comando (o comandos separándolos con punto y coma «;» sin las comillas). En este ejemplo, vamos a utilizar Crontab para borrar los archivos de la carpeta tmp.
find /tmp -type f -empty -delete
Seguidamente, editamos el archivo para añadir la programación, es decir, cuando queremos que se ejecuten las tareas que hemos introducido en el archivo.
crontab -e
Para que se ejecute todos los días a las 10 de la mañana debemos añadir antes del script 0 10 * * *, quedando la línea de la siguiente forma
0 10 * * * find /tmp -type f -empty -delete
Si queremos que se ejecute a otra hora, tan solo debemos modificar el número 10 por la hora (en formato 24 horas) en la que queremos que se ejecute. También podemos utilizar los códigos de tiempo que hemos mostrado en el apartado Gestión de la programación para configurarlo. Finalmente, utilizamos el siguiente comando para que Cron pueda ejecutar el archivo de automatizaciones que hemos creado.
[code]chmod ugo+x prueba
Alternativas a Cron
Como hemos mencionado en apartados anteriores, Cron es la encargada de ejecutar los comandos que previamente hemos introducido en Crontab. Cron es una herramienta perfecta para equipos que están en funcionamiento las 24 horas del día, aunque también podemos adaptarla a nuestro horario de trabajo, aunque nos reste recursos del equipo mientras se realizan las tareas. Si buscamos opciones más sencillas a Cron, a continuación, os mostramos alguna de las mejores alternativas.
Anacron
Anacron nos permite programar a la ejecución automatizada de tareas en un día, semana o mes, en cualquier momento. Si el equipo se encuentra apagado, la próxima vez que iniciemos el equipo, se realizará la tarea que previamente hayamos introducido en Crontab. Con Cron, si el equipo, está apagado en la fecha especificada, la tarea no se llevará a cabo cuando encendamos el equipo. Anacron está disponible en la mayoría de las distribuciones Linux y podemos instalarla en el equipo a través del siguiente comando.
sudo apt install anacron
Cronie
Cronie nos ofrece una experiencia mucho más completa que Cron, y un pequeño conjunto de aplicaciones (entre las que se incluye Anacron) y con la que podemos programar flujos de trabajo de una forma muy rápida y sencilla a través de Crontab. A diferencia de Anacron, para instalar Cronie, no se encuentra disponible en los repositorios Linux, por lo que debemos visitar su página web en GitHub para poder descargarlo, o bien utilizar el siguiente comando.
wget https://github.com/cronie-crond/cronie/releases/download/cronie-1.6.1/cronie-1.6.1.tar.gz