lunes, 26 de enero de 2009

Automatización de Tareas

Comando at

Permite indicar el momento en que se quiere ejecutar un trabajo
  • Sintaxis:
    at [opciones] TIME
  • Al ejecutar at pasamos a un nuevo prompt, que nos permite introducir comandos que se ejecutarán a la hora indicada
    • para salvar el trabajo y salir CTRL-D
    • el entorno actual también se salva
    • al terminar, la salida estándar se envía como un mail al usuario
    • el trabajo no se para al salir de la sesión
  • Ejemplo:
    $ at 11:45
    warning: commands will be executed using /bin/sh
    at> ls /tmp > lista
    at>
    job 4 at Wed Nov 16 11:45:00 2005
  • Algunas opciones:
    • -f FILE especifica un fichero conteniendo las acciones a realizar en vez de la entrada estándar
    • -c jobnumber muestra el trabajo a ejecutar
    • -m envía un mail al usuario, incluso aunque no haya salida
    • -v muestra la hora a la que se ejecutará el trabajo
  • TIME puede especificarse de varias formas:
    • HH:MM por ejemplo 12:54
    • HH:MMAM/PM, por ejemplo 1:35PM
    • HH:MM MMDDYY, por ejemplo 1:35PM 122505
    • now + numero unidades, donde unidades puede ser minutes, hours, days, o weeks
      $ at now+2hours
    • today, tomorrow, por ejemplo 12:44tomorrow
    • midnight (00:00), noon (12:00), teatime (16:00)

Comandos relacionados

  • atq o at -l lista los trabajos pendientes del usuario
    • si es el superusuario, lista los trabajos de todos los usuarios
  • atrm o at -d borra trabajos identificados por su número de trabajo
  • batch ejecuta trabajos cuando la carga del sistema es baja
    • el trabajo empieza en cuanto la carga caiga por debajo de 1.5
    • la carga se obtiene del fichero /proc/loadavg

Ficheros de configuración

  • El administrador puede controlar la utilización de at
    • Ficheros /etc/at.allow y /etc/at.deny
      • at.allow lista los usuarios que pueden usar at
      • at.deny lista los usuarios que NO pueden usar at
  • Primero se chequea /etc/at.allow
    • si está el usuario, puede usar at
    • si no está o el fichero no existe, se chequea /etc/at.deny
    • si el usuario no está en at.deny puede usar at
  • Si no existe ninguno de los dos ficheros, solo root puede ejecutar at
  • Para dar permiso para todos los usuarios crear sólo el fichero at.deny vacío

Procesos periódicos

Para crear trabajos que se ejecuten periódicamente se utilizan el demonio cron y el comando crontab
  • crontab permite configurar los procesos periódicos
  • cron se encarga de su ejecución
La utilización de cron se gestiona a través de los ficheros /etc/cron.allow y /etc/cron.deny
  • el comportamiento si no existen los ficheros depende de la configuración del sistema
  • en Debian, si no existen, todos los usuarios pueden usar crontab

Fichero crontab

Los trabajos se especifican en un fichero de crontab, que se guarda en /var/spool/cron/crontabs, y que puede tener tres tipos de líneas:
  • Comentarios, que empiezan por #
  • Definición de variables, de tipo nombre = valor
    # shell usada para ejecutar los comandos
    SHELL=/bin/bash
    # Usuario al que se envía (por mail) la salida
    # de los comandos (por defecto, se envían
    # al propietario del fichero crontab)
    MAILTO=pepe
  • Especificación del trabajo y de la hora de ejecución, de la siguiente forma:
    minuto hora día mes día_semana comando
    • el día de la semana de 0 a 7 (0 ó 7 domingo)
    • * indica cualquier valor
    • se pueden indicar rangos, listas o repeticiones:
      • 1-5 para indicar de lunes a viernes
      • 0,15,30,45 para indicar cada 15 minutos
      • 0-23/2 en el campo hora, indica realizar cada dos horas (0, 2, 4, etc.)
  • Ejemplos:
    • Borra el /tmp todos los días laborables a las 4:30 am
      30 4 * * 1-5 rm -rf /tmp/*
    • Escribe la hora, cada 15 minutos, durante la noche:
0,15,30,45 0-8,20-23 * * * echo Hora:$(date)»/tmp/horas

Comando crontab

Para crear y editar los trabajos periódicos se puede utilizar el comando crontab
  • Sintaxis:
    crontab [-u usuario] {-l|-e|-r}
    crontab [-u usuario] fichero
  • en la segunda forma instala un nuevo crontab desde un fichero
  • Opciones:
    • -u usuario crea o maneja el crontab de un usuario específico (sólo root)
    • -e edita el fichero crontab
    • -l muestra el fichero crontab
    • -r borra el fichero crontab

Fichero /etc/crontab y /etc/cron.d

El demonio cron busca ficheros en /var/spool/cron para ejecutarlos a la hora indicada
  • además también ejecuta las acciones indicadas en los ficheros /etc/crontab y en el directorio /etc/cron.d/
  • estos ficheros suelen ser de mantenimiento del sistema
De esta forma, el administrador puede crear scripts que se ejecuten con periodicidad horaria, diaria, semanal y mensual
  • sólo tiene que colocar esos scripts en los directorios /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly o /etc/cron.monthly
  • la fecha y hora de ejecución de estos scripts se controla en el fichero /etc/crontab