Sistema de enfileiramento simples?

8

Dado um PC comum, gostaríamos de usá-lo para executar algumas tarefas em segundo plano, 24 horas por dia.

Basicamente, gostaríamos de ter comandos como:

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

As tarefas adicionadas devem ser simplesmente colocadas em uma fila e executadas uma após a outra em segundo plano (mantendo a execução após o logout do shell).

Existe algum script / programa simples que faz isso?

    
por dagnelies 26.08.2011 / 09:06

3 respostas

7

Há um comando padrão batch que faz mais ou menos o que você procura . Mais precisamente, batch executa os trabalhos quando a carga do sistema não é muito alta, um de cada vez (para que não faça qualquer paralelização). O comando batch faz parte do pacote at .

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)
    
por 27.08.2011 / 00:39
2

Existem muitos sistemas de filas, mas são frequentemente muito especializados.

Você pode pesquisar o at programador. É como cron em alguns aspectos, mas é configurado mais como uma fila para tarefas únicas do que para tarefas repetidas. Pode "agendar" coisas em critérios diferentes do tempo, como a carga do sistema ou a sequência de tarefas.

Sua distro favorita quase certamente terá pacotes para ela.

    
por 26.08.2011 / 11:34
2

Outra solução é usar lpd e criar um "driver de impressão" personalizado que execute seus trabalhos. Um amigo me ajudou a resolver isso quando tive um pedido semelhante. Faça um script como este e coloque-o em /tmp/batch.sh :

#!/bin/bash

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

Em seguida, execute:

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

Isso inicia uma fila e você pode criar mais usando outros nomes em vez de lote1. Adicione um trabalho com:

lp -d batch1 /path/to/jobscript

Gerenciar trabalhos com lpq , lprm e lpstat . Se você quer mais flexibilidade com a transmissão de argumentos para seus trabalhos, pode tornar o criador de scripts batch.sh.

(Eu tentei batch antes de seguir esse caminho, mas ele não funciona como uma fila no OSX, ou eu estava usando errado.)

    
por 28.01.2014 / 20:19