Me gustaría encontrar una herramienta de espacio de usuario (preferiblemente en Python, salvo que, en cualquier cosa que pueda modificar fácilmente si ya no hace lo que necesito) para reemplazar un guión corto he estado usando que hace las dos cosas siguientes:Biblioteca de Python para la programación de trabajos, ssh
- encuestas a menos de 100 ordenadores (Fedora 13, se da la circunstancia de carga), la memoria disponible, y si parece que alguien los está utilizando
- selecciona buenos hosts para trabajos, ejecuta estos trabajos en ssh. Estos trabajos son la ejecución de programas de línea de comando arbitrarios que leen y escriben en un sistema de archivos compartido, típicamente scripts de procesamiento de imágenes o similares, y en ocasiones tareas que requieren mucha memoria.
Por ejemplo, usando mi script actual, que pueda en un símbolo del pitón
>>> import hosts
>>> hosts.run_commands(['users']*5)
o desde la línea de comandos
% hosts.py "users" "users" "users" "users" "users"
para ejecutar el comando users
5 veces (después de encontrar 5 computadoras en las que el comando podría ejecutarse comprobando la carga de la CPU y la memoria disponible en al menos 5 computadoras desde un archivo de configuración). No debe haber otro servidor de trabajo aparte del script que acabo de ejecutar, y no hay daemons o procesos de trabajadores en las computadoras que ejecutarán estos comandos.
También me gustaría poder rastrear los trabajos, ejecutar trabajos nuevamente en caso de falla, etc., pero estas son características adicionales (muy estándar en un programador de tareas reales) que realmente no necesito.
He encontrado buenas librerías ssh para Python, cosas como classh y PuSSH, que no tienen las funciones (muy simples) de equilibrio de carga que me gustaría. En el otro lado de lo que quiero es Condor o Slurm, como lo sugirió crispamares antes de aclarar que quiero algo más ligero. Esos estarían haciendo las cosas de la manera correcta, pero al leer sobre ellos, suenan como si los hiciera girar en el espacio de usuario solo cuando los necesito, sería molesto o imposible. Este no es un clúster dedicado, y no tengo acceso de root en estos hosts.
Actualmente estoy planeando utilizar un contenedor en classh con algunas encuestas básicas de computadoras cada vez que necesito saber qué tan ocupadas están si no puedo encontrar algo más.
¿Qué tipo de trabajos? [fabric] (http://docs.fabfile.org/en/1.0.1/index.html) (ssh wrapper, sin programación de trabajos), [jenkins] (https://wiki.jenkins-ci.org/display/JENKINS/Meet + Jenkins) (herramienta de CI: tareas repetibles, configuración de cero, equilibrio de carga simple), [disco] (http://discoproject.org/) (MapReduce, erlang + python, ¿solo trabajos de python?), Hadoop (grande, ¿requiere raíz?), PBS (Torque - sistema de gestión de carga de trabajo tradicional). – jfs
Gracias J.F., pregunta editada para indicar que los trabajos ejecutan programas de línea de comandos que procesan imágenes, leen y escriben en un sistema de archivos compartido. – Thomas
La tela podría ser razonable para este uso, pero no hasta que la ejecución en paralelo del código sea una característica. – Thomas