educación, informática y demás

Uncategorized

Programación de tareas con cron.d

Hasta ahora hemos visto como podemos automatizar procesos o trabajos que tenemos que realizar en nuestro sistema utilizando shell scripts. En esta entrada vamos a ver cómo podemos programar la ejecución de tareas en un sistema GNU/Linux utilizando cron.d

Puedes echar un vistazo a la siguiente entrada dentro de educatica para tener un poco de información de contexto:

¿Qué es cron?

Cron es un servicio o demonio que ejecuta tareas, comandos o scripts, programados en el sistema. El demonio cron se ejecuta automáticamente desde los scripts de inicio de sistema /etc/init.d

Por tanto, cron es un servicio que por defecto está configurado para lanzarse cuando arranca el sistema . Cron permite ejecutar tareas, que serán ejecutables: aplicaciones, comandos o script lo que sea que se pueda ejecutar en el sistema, en un momento dado en el tiempo. Es decir, podemos programar cron para que ejecute algo en uno o varios momentos dados.

Podemos obtener más información de cron consultando su página de manual.

Vamos a echar un vistacito a los ficheros y directorios que se mencionan en la ayuda y vamos a practicar un poco distintas configuraciones con cron para aprender de verdad cómo funciona.

Directorio /var/spool/cron/crontabs

Tenemos que acceder como administrador

No hay nada en este directorio, lo cual tiene mucho sentido porque no hemos creado ninguna tabla de cron con tareas a ejecutar todavía con ningún usuario.

Fichero /etc/crontab

La mejor forma de aprender cómo funciona este servicio es poniendo en práctica las configuraciones que hemos visto, es decir utilizándolo en casos prácticos.

1. Creando una tarea simple por un usuario del sistema cualquiera

Cambiamos de usuario al usuario marinapg

Vamos a echar un vistazo a la ayuda del comando crontab que es el comando que nos recomendaban utilizar para gestionar tablas de tareas con cron.

Vamos a ver las opciones de crontab más habituales

Vamos a listar la tabla de tareas de este usuario, con la opción -l.

Ahora vamos a editar la tabla de tareas cron para el usuario marinapg, para ello ejecutamos crontab con la opción -e (editar).

Pulsamos Enter o insertamos 1 para utilizar nano.

Si os fijáis no tenemos tanta ayuda en la tabla de tareas cron para el usuario como la teníamos en el fichero general. Vamos a recordarla aquí abajo.

  • m: Minuto, del 0 al 59
  • h: Hora, del 0 al 23
  • dom: Dia del mes: 1 al 31
  • Mon: Mes del 1 al 12
  • dow: Dia de la semana del 0 al 6 (7)

Vamos a intentar guardar en un fichero llamado avisos.log dentro del directorio personal del usuario marinapg un mensaje dónde ponga: «Estoy aquí!! – » seguido de la fecha y hora actual. Este mensaje se guardará en el fichero cada minuto de cada día de cada mes, añadiéndose al final del fichero.

Para ello tenemos que programar un solo comando :). Vamos a empezar mostrando en pantalla el mensaje que nos solicitan.

Ahora vamos a enviar esa información al fichero avisos.log que estará en el directorio personal de marinapg.

Con esta información ya podemos crear nuestra primera tarea

Vamos a ver si funciona. Salimos de nano guardando. Ahora mostramos la tabla de tareas de cron del usuario marinapg con la opción -l de crontab.

Por curiosidad, vamos a echar un vistazo al directorio /var/spool/cron…. a ver si hay algo.

Antes no había nada en este directorio, ahora esta la tabla de tareas de cron del usuario marinapg. Vamos a echar un vistazo al contenido de este fichero.

Es decir, en este directorio se almacenan ficheros con el nombre de los usuarios que tengan tablas de tareas de cron. Dentro de cada fichero tendremos la tabla de cron del usuario concreto que, si nos fijamos en los permisos, tan solo podrá acceder para lectura y escritura el propio usuario.

Vamos a echar un vistazo al fichero avisos.log a ver si se ha ejecutado la tarea.

2. Más que un comando, un script 🙂

Crea un script simple con el usuario marinapg que cree el directorio backup dentro de su directorio personal si no existe. Después, moverá los ficheros con extensión log de su directorio personal al directorio backup.

Llamaremos el script con el nombre backupLog.sh

Vamos a crear el script con el usuario marinapg.

El script podría ser más o menos así

Luego le damos una vueltita para evitar que se sobrescriban los ficheros 🙂 Vamos a preparar el script para que se pueda ejecutar y programamos la tarea en la tabla de tareas cron del usuario marinapg.

Funciona!!!

Vamos a intentar arreglar el problema de sobrescritura, para ello aprovechamos que hemos metido la ruta del directorio de backup en una variable.

Guardamos y salimos

Ya tenemos un fichero nuevo de avisos… vamos a probar a ejecutarlo de nuevo

Vamos a programar el script para que se ejecute cada hora.

Podemos comprobarlo listando la tabla de tareas de cron del usuario marinapg

3. Editando y borrando la tabla

Qué sucede si ya no queremos que se ejecute la tarea programada en cron que ejecuta el script backupLogs.sh

Para poder eliminar una tarea de la tabla de tareas de cron del usuario utilizaremos la opción -e para editarla.

Dentro del fichero de tabla de cron del usuario, podemos eliminar la tarea borrándola.

Editamos el fichero

Al comentarla esa línea dejará de estar disponible.

Supongamos que ahora queremos quitar todas las tareas, no queremos tener ninguna tarea programada para el usuario marinapg. Para ello podemos utilizar la opción -r.

Eliminado todo

4. Tareas de administración

Para ejecutar tareas de administración como root tenemos dos opciones, bien utilizar crontab -e con el usuario root o bien editar el fichero /etc/crontab

Vamos a utilizar la segunda opción por la ayuda visual que tenemos en los comentarios para programar una tarea. Para este caso práctico vamos a crear un pequeño script que creará una copia de seguridad del contenido del directorio /home en el directorio /backup. Si no existe el directorio /backup, lo creará.

El script lo llamaremos backupAll.sh

Programa el sistema para que realice una copia de seguridad de los directorios personales de los usuarios de lunes a viernes a las 22:30 de la noche.

Algunos ejemplos… que puede que no sean correctos

Si no sabemos hacer algo, lo miramos. Vamos a consultar la página de manual del fichero (sección 5) de crontab

Aquí tenemos información de configuración de este fichero.

Vamos a crear el script

El script está en /home/alumno, vamos a cambiarlo al directorio /usr/bin que está en el path.

Configuramos cron

Vamos a probar si el script funciona…

Ahora vamos a probar si la programación de cron funcionaría, para ello borramos primero el directorio /backup y todo su contenido y programamos una tarea de prueba.

Vemos la hora

Programamos para que se ejecute automáticamente en el minuto 39 de todas las horas de todos los dias O:)

Esperamos….

Vamos dejar las cosas como deberían 😉

Dejar una respuesta