29 noviembre 2011

AUTOMATIZACIÓN DE TAREAS - GNU/LINUX

Definición

En cualquier sistema informático disponemos de una serie de herramientas con las que podemos realizar cada cierto periodo de tiempo determinadas tareas o acciones.
Estas pueden ser definidas por el propio S.O o por el administrador, incluso por algún usuario con determinados privilegios.
La necesidad viene dada tanto por el funcionamiento del S.O o por parte del administrador, para garantizar un funcionamiento optimo del funcionamiento del sistema.

Un ejemplo de este tipo de "tareas programadas" que más conocemos es el antivirus, que cada cierto tiempo realiza su acción porque fue programada anteriormente para llevar a cabo su trabajo cada cierto tiempo establecido.
Ejemplo de tareas programadas:
  • Revisar el estado que ocupa el disco y que cuando lleve un 75% salte un aviso.
  • Borrar ficheros temporales.
  • Hacer copias de seguridad.
  • Informe mensual sobre el funcionamiento del sistema, sobre todo en servidores.
  • Apagado del equipo de forma automática adaptándose al horario de trabajo.
  • Recordatorios.
  • etc.
En los sistema GNU/Linux ya se encuentran “preconfiguradas” ciertas tareas de forma periódica; es decir, el servicio de automatización de tareas ya está funcionando cuando se realiza la instalación del sistema operativo.
Los programas típicos destinados a la gestión de las tareas automatizadas son dos, “at” y “cron”.

CRON

El demonio cron es uno de los servicios básicos de sistemas GNU/Linux. 
Siempre está arrancado.
Su función es ejecutar tareas programadas (cada cierto tiempo y por un usuario con privilegios).

Instalación de cron en el sistema

Desde el terminal: # apt-cache show cron

                           # apt-get install cron

O desde el programa gráfico Synaptic: buscando por nombre de paquete. 

Ficheros implicados y configuración básica

  • el propio demonio de funcionamiento: crond
  • el fichero de configuración (root): /etc/crontab
  • el fichero de inicio y parada del demonio: /etc/init.d/cron (start/restart/stop)
  • la orden para la programación de tareas (usuarios con privilegios): crontab
  • el sistema de informes (logs) típico de los sistemas GNU/Linux: /var/log/cron

Programar tareas
Desde el fichero de configuración (/etc/crontab), estructurado por líneas, cada una de las cuales contiene una tarea programada:

# minuto hora dia mes dia_semana usuario orden_a_ejecutar
  • El campo minuto puede ser definido entre [0-59],
  • El campo hora puede ser definido entre [00-23],
  • El día del mes, entre [1-31],
  • El mes del año, entre los valores [1-12],
  • El día de la semana, entre [0-7], asumiendo el 0 como inicio de la semana en domingo, y el valor 7 también como domingo.
  • El campo usuario es aquel usuario del sistema con permisos que ha definido la tarea programada,
  • Por último, se indica la orden (o el script) que se ejecutará.

Existen símbolos especiales para los cinco primeros campos, que indicarían aspectos genéricos (no un número concreto):
* : indica cualquier valor
, : actúa como separador de una lista de valores
# : indica que lo que acompaña es un comentario (no se ejecutará)
- : sirve para indicar un rango de valores
/ : sirve para indicar un paso de valor (por ejemplo, en el campo mes si se indica */3 se está detallando que la tarea se realizará cada tres meses).

Ejemplos de tareas programadas
Queremos ejecutar a las 10:00h y a las 17:00h, todos los días laborales la orden 'Recordatorio'.
Desde el fichero de configuración (/etc/crontab): 0 10,17 * * 1-5 echo "Recordatorio" | wall

Queremos ejecutar cada 45 minutos, los martes, además todos los 13 de cada mes la orden 'Es martes o 13'.
Desde el fichero de configuracion (/etc/crontab): 0,45 * 13 * 2 echo “ Es martes o 13!” | wall

En los cinco primeros campos se puede optar por los siguientes cadenas:
@reboot: Se ejecuta al iniciarse la máquina.
@yearly: Se ejecuta una vez al año.
@monthly: Se ejecuta una vez al mes.
@weekly: Se ejecuta una vez por semana.
@daily: Se ejecuta una vez al día.
@hourly: Se ejecuta una vez por hora.

Y, por último, también es interesante conocer que cada una de las tareas programadas se ejecutan mediante un shell (/bin/sh), y que están disponibles algunas variables de entorno, como pueden ser LOGNAME, SHELL o NAME.


AT

A diferencia de cron, sólo realiza las tareas una vez, es decir, se llevará a cabo en el momento indicado y no se volverá a ejecutar más.
Las utilidades relacionadas con “at”:
  • at: orden que se utiliza para añadir nuevas tareas,
  • atd: es el demonio responsable de ejecutar las tareas programadas desde “at”
  • atq: muestra la lista de tareas pendientes a ejecutar (por el usuario que llama al comando)
  • atrm: elimina una tarea de la lista de pendientes.

Instalación de at en el sistema

Desde el terminal: # apt-get install at 

Ficheros implicados y utilización

  • /etc/at.allow: si existe, sólo los usuarios listados en este fichero tienen permiso para ejecutar la utilidad.
  • /etc/at.deny: si existe este fichero, y no el anterior, los usuarios detallados en él no pueden ejecutar at (ni atrm, ni atq).
  • Si no existiesen ninguno de los anteriores ficheros, sólo el usuario root puede disponer de la utilidad “at”.

Después de la instalación, el fichero /etc/at.deny, está vacío por defecto, de modo que todos los usuarios tienen acceso a la orden “at”.
Para conocer el funcionamiento de “at: man at
Programar tareas
  • HH[:]MM[am|pm] [Mes día]
  • Se puede añadir a la fecha/hora un número (seguido de “minutes”,”hours”,”days”,”weeks”)
  • También se pueden añadir valores relativos como “now”, “midnight”, “noon”, “teatime”, “today” o “tomorrow”.

Ejemplos de tareas programadas
Se ejecuta en el horario, día y mes estimado:
at 10am tomorrow
at 10am Jun 30
at 1730 Feb 28 + 3 days
at 12am tomorrow < copia.sh
(Contenido de copia)
#!/bin/sh
#Copia del fichero /etc/X11/xorg.conf al escritorio del usuario
cp -f /etc/X11/xorg.conf $HOME/Desktop
exit 0

0 comentarios:

Publicar un comentario

 
;