Práctica: Gestor de Colas

Esta práctica es mas complicada que las anteriores. Escriba un programa que recibe como entrada un fichero conteniendo direcciones IP o nombres de máquinas machines.dat y un fichero conteniendo descripciones de tareas tasks.dat. El programa lanzará las tareas descritas en tasks.dat en las máquinas enumeradas en machines.dat que estén operativas. Se asume que está habilitado el comando rsh y que las máquinas comparten el sistema de archivos (están en NFS).

Desarrolle el programa de manera estructurada. Active el pragma use strict para evitar errores. Comienze cubriendo progresivamente los siguientes puntos:

  1. El programa deberá comprobar que máquinas están operativas haciendo uso del comando ping con la opción -c 1 para limitar el número de paquetes de prueba a uno. El comando ping en ocasiones no termina. Repase las estrategias usadas en el capítulo para finalizar la espera por el comando despues de un número de segundos especificado. Cuando no se sobrepasa el tiempo límite, puede hacer uso de expresiones regulares para detectar que la máquina está accesible. Cuando se sobrepasa, la rutina manejadora puede abortar el proceso.
  2. Si la máquina esta accesible, compruebe que tiene el intérprete Perl instalado, haciendo uso de rsh y del comando which.
  3. El fichero de tareas es un fichero de texto que contiene una serie de registros describiendo una tarea. Cada registro empieza por una línea con la palabra TASK y un nombre lógico que es el nombre de la tarea. Cada tarea se separa de la siguiente por una línea en blanco. Cada campo del registro es una línea que comienza por el nombre del campo, dos puntos (:) y el valor del campo. Los campos permitidos son:
    1. DIRECTORY. Contiene el directorio en la máquina remota de trabajo de la tarea. El valor es una cadena entre comillas simples.
    2. El campo ENV que contiene la lista de parejas variable de entorno y su valor, separadas por blancos. Estas variables de entorno se deberán modificar antes de la ejecución de la tarea. Las variables y los valores son cadenas entre comillas simples.
    3. STDOUT que contiene el nombre del fichero al que se desea redirigir la entrada estándar. Análogamente habrán campos STDIN y STDERR. Si STDIN no existe se redefine a '/dev/null'. Elija valores por defecto para STDOUT y STDERR. El valor de estos campos es una cadena entre comillas simples.
    4. El campo MACHINES si existe es una expresión regular describiendo las máquinas en las que esta tarea puede ejecutarse. Cada nombre de máquina se delimita entre comillas simples.
    5. El campo COMMAND conteniendo el nombre del comando a ejecutar. El valor es una cadena entre comillas simples.
    6. PARAMETERS que contiene la lista de llamadas al programa. Cada llamada se separa de la anterior mediante un punto y coma. Cada parámetro va entre comillas simples.
Todos los campos son opcionales salvo el campo COMMAND. En una primera fase, asuma que el campo COMMAND es el único campo que existe en el fichero de tareas. Vaya añadiendo campos posteriormente.

Sigue un ejemplo de fichero de tareas:

$ cat tasks.dat
TASK listar
ENV:'PATH /bin:/usr/bin'
COMMAND:'ls'
DIRECTORY:'~'
STDOUT: 'listar.out.$machine'
PARAMETERS: '-l';'-s' '-t'

TASK ordenar
COMMAND: 'sort'
DIRECTORY: '~/lhp/procesos/practica/'
STDOUT: 'ordenado.out.$machine'
STDIN: 'aordenar'
MACHINES: 'manis' 'timple'

y un ejemplo de fichero de máquinas:

$ cat machines.dat
timple
millo
manis
fonil



Subsecciones
Casiano Rodríguez León
2012-02-29