Tutorial

Comandos cron & crontab ¿Que son y para que sirven?

Hoy les traemos un tutorial para poder utilizar cron y crontab, que nos servirá para poder programar tareas en Linux.

¿Que significa Cron?

cron

Cron tiene su origen en el nombre griego chronos, que significa “tiempo”. Cron tiene una función en Linux y es la de administrar tareas en segundo plano que ejecuta procesos o guiones a intervalos regulares. No es muy distinto al programador de tareas de Windows, que ejecuta una acción en un tiempo que hayamos programado, cada ciertas, horas, días semanas o meses. Los procesos que deben ejecutarse se escriben en un fichero Crontab

 Cómo funciona

El demonio cron inicia de /etc/rc.d/ o /etc/init.d dependiendo de la distribución. Cron se ejecuta en el background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron en búsqueda de tareas que se deban cumplir.

Podemos agregar nuestros propios comandos o scripts con tareas a cron para automatizar procesos. Esto es muy útil en los casos en que queramos actualizar el sistema o realizar copias de respaldo periódicas, solo por citar algunos ejemplos.

¿Qué es Crontab?

Crontab es el archivo de texto en donde se guarda todas las tareas programadas por cron. Crontab verifica las fechas y horas en que se debe ejecutar el script o el comando, los permisos de ejecución y los realiza en el background. Cada usuario del equipo posee su propio crontab, de hecho el /etc/crontab se asume que es el archivo crontab del usuario root, cuando los usuarios normales (e incluso root) desean generar su propio archivo de crontab, entonces utilizaremos el comando crontab.

Crontab facilita la tarea de gestionar las tareas programas en un sistema multiusuario, como usuario root o un usuario simple del sistema.

Utilizando crontab

cron

En este ejemplo vamos a automatizar la tarea de actualizar nuestro sistema, que suele ser bastante frecuente en Linux.

Para poder hacer esto vamos a necesitar crear un script. Este script va a ser llamado por cron y tendra todas las instrucciones que vamos a escribir a continuación, por lo tanto es necesario probarlo en varios casos y de varias formas antes de incluirlo en cron:

#!/bin/bash
#script ejemplo de actualizacion
#elija su distribucion
#debian-ubuntu
#apt-get update & apt-get -y upgrade
#fedora
#yum -y update
#Arch
#pacman --noconfirm -Syu

Quitale el # a la línea de tu distro. En caso de que sea Ubuntu/Debian, a la que empieza con apt-get.

Te recomendamos la lectura:  Desinstalar Ubuntu con dual boot

Vamos a guardar el script con el nombre actualizacion.sh en el directorio ‘scripts’. Luego cambiamos los permisos de ejecución del dichoso script con:

chmod a+x ~/scripts/actualizacion.sh

Ejecutamos el script un par de veces para verificar que todo este bien (no debe contener errores, si no cron solo repetirá un error una y otra vez). El paso siguiente es agregar la tarea a crontab.

Agregar tareas a crontab

Vamos a ejecutar la edición del crontab con crontab -e. El archivo crontab lucirá algo así.

# m h dom mon dow user command

Significados:

cron

  • m corresponde a los minutos en que se va a ejecutar el script,los valores pueden ser de 0 a 59
  • h esta sera la hora, se maneja el formato de 24 horas, los valores son de 0 a 23
  • dom hace referencia al día del mes
  • dow significa el día de la semana, los valores pueden ser de 0 a 7 (7 seria el Domingo) o las 3 primeras letras del día en inglés: mon, tue, wed, thu, fri, sat, sun.
  • user es el nombre usuario que va a ejecutar ese comando, puede ser root, u otro usuario.
  • command refiere al comando o a la ruta absoluta del script a ejecutar, ejemplo: /home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser ejecutable

Veamos algunos ejemplos de tareas de cron explicados:

 15 10 * * * usuario /home/usuario/scripts/actualizar.sh

Ejecutará el script actualizar.sh a las 10:15 a.m. todos los días

15 22 * * * usuario /home/usuario/scripts/actualizar.sh

Esto ejecuta el script actualizar.sh a las 22:15 p.m. todos los días

00 10 * * 0 root apt-get -y update Usuario root

Ejecutará una actualización todos los domingos a las 10:00 a.m

45 10 * * sun root apt-get -y update

El usuario root ejecutará una actualización todos los domingos (sun) a las 10:45 a.m

30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh

Se ejecuta un script el día 20 de noviembre a las 7:30

30 7 11 11 sun usuario /home/usuario/scripts/pastel_con_velitas.sh

El día 11 de noviembre a las 7:30 a.m. y que sea domingo, el usuario festejará su sysadmin (o sea a mí)

Te recomendamos la lectura:  Como actualizar el Kernel Linux desde el Terminal de Ubuntu

También podemos probar algunos comandos especiales como:

30 17 * * 1,2,3,4,5

Esto significa que el script se ejecutara a las 5:30 de la tarde todos los días de lunes a viernes.

00 12 1,15,28 * *

A las 12 del día todos los días primero, quince y 28 de cada mes (ideal para nóminas)

Crontab tambien puede manejar algunos comandos mucho mas sencillo que los descritos mas arriba.

@reboot Ejecuta una vez, al inicio
@yearly ejecuta sólo una vez al año: 0 0 1 1 *
@annually es igual que @yearly
@monthly esto ejecutara el script una vez al mes, el día primero: 0 0 1 * *
@weekly Semanal el primer minuto de la primer hora de la semana. 0 0 * * 0″.
@daily ejecuta el script diariamente a las 12:00A.M. 0 0 * * *
@midnight igual que @daily
@hourly esto ejecutara el script el primer minuto de cada hora: 0 * * * *

Veamos algunos ejemplos de esto:

@hourly usuario /home/usuario/scripts/molestorecordatorio.sh
@monthly usuario /home/usuario/scripts/respaldo.sh
@daily root apt-get update && apt-get -y upgrade

Por último y no menos importante:

Administración de trabajos en cron

crontab archivo

Remplaza el existente archivo crontab con un archivo definido por el usuario

crontab -e

Editar el archivo crontab del usuario, cada linea nueva sera una nueva tarea de crontab.

crontab -l

Crea una lista de todas las tareas de crontab del usuario

crontab -d

Esto borra el crontab del usuario

crontab -c dir

Define el directoriod y crontab del usuario (este debe tener permisos de escritura y ejecución del usuario)

crontab -u usuario

prefijo para manejar el crontab de otro usuario, ejemplos:

$ sudo crontab -l -u root
$ sudo crontab -e usuario2
#crontab -d -u usuario

Como vemos, es una herramienta útil que se puede manejar desde la linea de comandos de Linux, aunque tambien existe una aplicación con interfaz gráfica que podría servir para esta tarea, el GNOME Schedule.

Gustavo Gamarra

Soy operador de PC e instalador de redes informáticas , redactor y escritor en mis ratos libres. Amante de la tecnología, el cine, el fútbol y los videojuegos. Les escribo desde Buenos Aires, Argentina.

Publicaciones relacionadas

Deja una respuesta

Los datos de carácter personal que nos facilite mediante este formulario quedarán registrados en un fichero de Miguel Ángel Navas Carrera, con la finalidad de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento del interesado. Si no se acepta no podrás comentar en este blog. Puedes consultar mi política de privacidad. Puede ejercitar los derechos de acceso, rectificación, cancelación y oposición en [email protected].

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *

Botón volver arriba