-->

Planificación de tareas con crontab

Objetivo:

Aprender a planificar tareas en Linux mediante el comando crontab, comprendiendo la estructura de sus cinco campos de tiempo (minuto, hora, día del mes, mes y día de la semana), y crear, listar y eliminar una tarea planificada propia.

Escenario:

  • Herramientas: Terminal de Linux y un sistema Debian o basado en Debian.
  • Conceptos clave: cron, crontab, campos de tiempo, asterisco como comodín, redirección de salida, crontab -l, crontab -e, crontab -r, crontab con nombre de fichero.

Instrucciones:

Fase 1: Comprobar que el proceso cron está en ejecución

  • Abre una terminal y comprueba que el proceso cron se encuentra activo en el sistema:
  • ps -ef | grep cron
  • Localiza en la salida el proceso correspondiente y observa que se trata de uno de los procesos que se inician al arrancar el sistema.

Fase 2: Comprobar si tienes tareas planificadas

  • Consulta si tu usuario tiene ya alguna tarea planificada mediante crontab:
  • crontab -l
  • Observa el mensaje que indica que no existen tareas planificadas para tu usuario.

Fase 3: Crear un fichero con la definición de la tarea

  • Crea un nuevo fichero de texto llamado microntab con un editor:
  • nano microntab
  • Escribe dentro de este fichero la siguiente línea, que ejecutará el comando date cada minuto y guardará el resultado en un fichero, añadiendo cada nueva ejecución al final:
  • * * * * * date >> /tmp/fecha
  • Guarda el fichero y sal del editor.
  • Comprueba el contenido del fichero creado:
  • cat microntab

Fase 4: Cargar la tarea planificada en el sistema

  • Carga el contenido del fichero como tarea planificada de tu usuario:
  • crontab microntab
  • Comprueba que la tarea se ha registrado correctamente:
  • crontab -l

Fase 5: Comprobar la ejecución periódica de la tarea

  • Consulta el contenido del fichero de resultados generado por la tarea planificada:
  • cat /tmp/fecha
  • Espera al menos un minuto y repite la consulta para comprobar que se ha añadido una nueva línea:
  • cat /tmp/fecha
  • Utiliza el comando watch, visto en una práctica anterior, para observar en directo cómo se añade una nueva línea cada minuto:
  • watch -n 30 cat /tmp/fecha
  • Detén la ejecución de watch cuando hayas comprobado al menos dos o tres ejecuciones nuevas:
  • Ctrl + C

Fase 6: Eliminar la tarea planificada

  • Elimina la tarea planificada de tu usuario:
  • crontab -r
  • Confirma la eliminación cuando el sistema te lo solicite.
  • Comprueba que la tarea ya no existe:
  • crontab -l

Fase 7: Modificar los campos de tiempo

  • Edita de nuevo el fichero microntab:
  • nano microntab
  • Modifica la línea para que la tarea se ejecute únicamente en los minutos 1, 5 y 10 de las horas comprendidas entre las 6 y las 9:
  • 1,5,10 6-9 * * * date >> /tmp/fecha
  • Guarda el fichero y sal del editor.
  • Reflexiona, sin necesidad de esperar a que se ejecute, sobre en qué momentos concretos se lanzaría esta tarea a lo largo de un día.

Preguntas de reflexión:

  1. ¿Qué diferencia existe entre cron y crontab?
  2. ¿Qué significan cada uno de los cinco campos de tiempo de una línea de crontab (minuto, hora, día del mes, mes y día de la semana)?
  3. ¿Qué significa el asterisco (*) colocado en uno de los campos de tiempo?
  4. ¿Por qué es tan importante redirigir la salida de un comando cuando se ejecuta mediante crontab?
  5. ¿Qué diferencia hay entre crontab -e y crear un fichero aparte para después cargarlo con crontab nombre_fichero?
  6. ¿Para qué sirve la opción crontab -l? ¿Y la opción crontab -r?
  7. ¿Qué significa colocar varios valores separados por comas en uno de los campos de tiempo, como en 1,5,10?
  8. ¿Qué significa utilizar un guion para indicar un intervalo, como en 6-9 en el campo de la hora?
  9. ¿Por qué no es necesario indicar el usuario en el crontab de un usuario normal, mientras que sí se indica en el crontab de root?
  10. ¿Por qué se dice que cron no garantiza una ejecución exacta al segundo?
Haz clic aquí para ver las soluciones y explicaciones

1. ¿Qué diferencia existe entre cron y crontab?

cron es el proceso del sistema que se ejecuta en segundo plano y comprueba periódicamente si hay tareas que deben lanzarse. crontab es el comando que se utiliza para crear, listar, editar o eliminar las tareas planificadas que cron se encargará de ejecutar.


2. ¿Qué significan cada uno de los cinco campos de tiempo de una línea de crontab?

El primer campo indica el minuto (0-59), el segundo la hora (0-23), el tercero el día del mes, el cuarto el mes (1-12) y el quinto el día de la semana (0-6, donde 0 es domingo).


3. ¿Qué significa el asterisco (*) colocado en uno de los campos de tiempo?

Indica que ese campo puede tomar cualquier valor posible, es decir, que la condición correspondiente (cualquier minuto, cualquier hora, cualquier día, etc.) se cumple siempre.


4. ¿Por qué es tan importante redirigir la salida de un comando cuando se ejecuta mediante crontab?

Porque cron ejecuta los comandos de forma independiente, sin que haya ninguna terminal ni usuario conectado observando la ejecución. Si no se redirige la salida a un fichero, el resultado del comando se perdería.


5. ¿Qué diferencia hay entre crontab -e y crear un fichero aparte para después cargarlo con crontab nombre_fichero?

crontab -e abre directamente un editor sobre el fichero de configuración de tareas del usuario. Crear un fichero aparte y cargarlo después permite prepararlo con calma en cualquier editor y, además, conservar una copia del fichero original para su reutilización o modificación futura.


6. ¿Para qué sirve la opción crontab -l? ¿Y la opción crontab -r?

crontab -l permite listar las tareas planificadas del usuario actual. crontab -r permite eliminar todas las tareas planificadas de dicho usuario.


7. ¿Qué significa colocar varios valores separados por comas en uno de los campos de tiempo, como en 1,5,10?

Indica que la tarea se debe ejecutar en cada uno de esos valores concretos; en este caso, en los minutos 1, 5 y 10 de la hora correspondiente.


8. ¿Qué significa utilizar un guion para indicar un intervalo, como en 6-9 en el campo de la hora?

Indica un rango continuo de valores; en este caso, todas las horas comprendidas entre las 6 y las 9, ambas incluidas.


9. ¿Por qué no es necesario indicar el usuario en el crontab de un usuario normal, mientras que sí se indica en el de root?

Porque cuando un usuario normal define sus propias tareas, el sistema ya sabe que se ejecutarán con los permisos de ese usuario. El crontab de root, en cambio, puede planificar tareas para distintos usuarios del sistema, por lo que es necesario especificar en cada línea a qué usuario corresponde cada tarea.


10. ¿Por qué se dice que cron no garantiza una ejecución exacta al segundo?

Porque cron comprueba las tareas planificadas a intervalos regulares (normalmente cada minuto) y las ejecuta cuando el sistema puede hacerlo, por lo que si el sistema está muy cargado de procesos, puede producirse un pequeño retraso de unos segundos respecto al momento exacto programado.


Ficha de Laboratorio: Planificación de tareas con crontab

Instrucciones de entrega:

  1. Rellena los campos y responde en este formulario desde tu navegador.
  2. Pulsa el botón de imprimir al final de la página.
  3. Selecciona "Guardar como PDF" en el diálogo de impresión.
  4. Entrega el archivo PDF en el aula virtual.

Alumno/a:      Fecha:      

Grupo:


Completa la ficha realizando las siguientes actividades:

  1. Comprueba que el proceso cron está activo y que tu usuario no tiene tareas planificadas.
    Escribe los comandos utilizados:

    Copia aquí los resultados obtenidos:
  2. Crea un fichero microntab que ejecute date cada minuto y guarde el resultado en /tmp/fecha.
    Escribe la línea exacta que has colocado en el fichero:

    Explica qué significa cada uno de los asteriscos de esa línea:
  3. Carga la tarea en el sistema y comprueba que se ha registrado correctamente.
    Escribe los comandos utilizados:

    Copia aquí el resultado obtenido con crontab -l:
  4. Comprueba, esperando al menos un minuto, que la tarea se ejecuta automáticamente.
    Escribe el comando utilizado para consultar el resultado:

    Copia aquí el contenido del fichero tras esperar al menos dos ejecuciones:
  5. Elimina la tarea planificada y comprueba que ha desaparecido.
    Escribe los comandos utilizados:

    Copia aquí el resultado obtenido tras la eliminación:
  6. Modifica el fichero para que la tarea se ejecute en los minutos 1, 5 y 10 de las horas entre las 6 y las 9.
    Escribe la nueva línea de configuración:

    Indica en qué horas y minutos exactos se ejecutaría esta tarea a lo largo de un día: