Sistema de cola simple?

10

Dada una PC básica, nos gustaría usarla para ejecutar algunas tareas en segundo plano las 24 horas.

Básicamente, nos gustaría tener comandos como:

add-task *insert command here*
list-tasks
remove-task(s)

Las tareas agregadas simplemente deben colocarse en una cola y ejecutarse una tras otra en segundo plano (seguir ejecutándose después de cerrar la sesión del shell).

¿Hay algún script / programa simple que haga esto?

dagnelies
fuente

Respuestas:

7

Hay un batchcomando estándar que hace más o menos lo que buscas. Más precisamente, batchejecuta los trabajos cuando la carga del sistema no es demasiado alta, uno a la vez (por lo que no hace ninguna paralelización). El batchcomando es parte del atpaquete.

echo 'command1 --foo=bar' | batch      
echo 'command2 "$(wibble)"' | batch
at -q b -l              # on many OSes, a slightly shorter synonym is: atq -q b
at -q b -r 1234         # Unschedule a pending task (atq gives the task ID)
Gilles 'SO- deja de ser malvado'
fuente
Es incorrecto decir que el batchcomando "no hace ninguna paralelización". Por lo general, hay un retraso predeterminado de 60 segundos entre comenzar un trabajo y comenzar el siguiente; sin embargo, no hay nada que haga que el próximo trabajo espere a que termine el primero; atdfelizmente comenzará los trabajos de la cola de lotes tan pronto como -bhaya transcurrido el valor establecido por la opción (consulte la atdpágina del manual).
rsaw
Batch no serializa estrictamente las tareas, por lo que si tiene un único recurso compartido, la respuesta de @sitaram (cola de tareas) debería funcionar mejor.
ergosys
5

Otra solución es usar lpdy crear un "controlador de impresión" personalizado que ejecute sus trabajos. Un amigo me ayudó a resolver esto cuando tuve una solicitud similar. Haga un guión como este y póngalo en /tmp/batch.sh:

#!/bin/bash

TMPFILE=$(mktemp /tmp/XXXX)
exec <"$6"
cat - > $TMPFILE
chmod a+x $TMPFILE
$TMPFILE
rm -f $TMPFILE

Entonces corre:

lpadmin -p batch1 -E -P /tmp/batch.sh

Eso inicia una cola y puede crear más utilizando otros nombres en lugar de batch1. Agregar un trabajo con:

lp -d batch1 /path/to/jobscript

Administrar los trabajos con lpq, lprmy lpstat. Si desea más flexibilidad para pasar argumentos a sus trabajos, puede hacer que el script batch.sh sea más elegante.

(Lo intenté batchantes de seguir esta ruta, pero o no funciona como una cola en OSX, o lo estaba usando mal).

Joe Fusion
fuente
Me doy cuenta de que @arnaud especificó "PC de consumo", lo que significa que probablemente no sea OSX, donde probé esta solución. Sin embargo, esto debería ser portátil, y es mucho más flexible que batch.
Joe Fusion
1
Este es uno de los hacks más genuinos que he visto.
Thiago Macedo
Lamentablemente, esto ya no parece funcionar. github.com/apple/cups/commit/…
wdkrnls
4

Hay muchos sistemas de colas, pero a menudo son muy especializados.

Puede consultar el atplanificador. Es como cronen algunos aspectos, pero se configura más como una cola para trabajos únicos que para trabajos repetidos. Puede "programar" cosas en criterios distintos al tiempo, como la carga del sistema o la secuencia de trabajos.

Su distribución favorita seguramente tendrá paquetes para ella.

Caleb
fuente
2

Noté que esta pregunta tiene varios años, por lo que puede que no sirva para el póster original, pero puede ayudar a alguien más.

Primero: "spooler de tareas" es la respuesta. Es bastante poderoso y Fedora al menos lo tiene.

Pero muchos de los servidores que uso, no puedo instalar paquetes arbitrarios sin mucha molestia, por lo que necesito algo que sea idealmente puro bash (o perl, o tal).

Después de luchar con esto por un tiempo, se me ocurrió una implementación de bash puro que parece funcionar bien hasta ahora. Puede encontrarlo en https://github.com/sitaramc/bq .

Es solo un script bash, por lo que la instalación es trivial. Sin embargo, supera sus requisitos segundo y tercero (pero también debería ser trivial implementarlos).

El guión se comenta libremente y, si lo desea, debería poder revisarlo en unos minutos.

sitaram
fuente
el paquete debian es spooler de tareas, el ejecutable es "tsp" en lugar de "ts" que colisionó con algo más. También me gusta porque puede reordenar tareas que están en la cola, no puede hacerlo con at / batch.
ergosys