Sistema di accodamento semplice?


10

Dato un PC di consumo, vorremmo usarlo per eseguire alcune attività in background 24 ore su 24.

Fondamentalmente, vorremmo avere comandi come:

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

Le attività aggiunte dovrebbero essere semplicemente inserite in una coda ed eseguite una dopo l'altra in background (continuando a funzionare dopo il logout della shell).

C'è qualche semplice script / programma che lo fa?

Risposte:


7

C'è un batchcomando standard che fa più o meno quello che stai cercando. Più precisamente, batchesegue i lavori quando il carico del sistema non è troppo elevato, uno alla volta (quindi non esegue alcuna parallelizzazione). Il batchcomando fa parte del atpacchetto.

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)

È sbagliato affermare che il batchcomando "non esegue alcuna parallelizzazione". Di solito c'è un ritardo predefinito di 60 secondi tra l'avvio di un lavoro e l'inizio del successivo; tuttavia, non c'è nulla che faccia attendere che il prossimo lavoro finisca per primo - atdinizierà felicemente i lavori dalla coda batch non appena il valore impostato -bdall'opzione è scaduto (vedi la atdpagina man).
rsaw,

Batch non serializza rigorosamente le attività, quindi se hai una singola risorsa condivisa, la risposta di @sitaram (task spooler) dovrebbe funzionare meglio.
ergosys,

5

Un'altra soluzione è quella di utilizzare lpde creare un "driver di stampa" personalizzato che esegua i lavori. Un amico mi ha aiutato a risolverlo quando avevo una richiesta simile. Crea una sceneggiatura come questa e inseriscila /tmp/batch.sh:

#!/bin/bash

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

Quindi eseguire:

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

Ciò avvia una coda e puoi crearne di più utilizzando altri nomi anziché batch1. Aggiungi un lavoro con:

lp -d batch1 /path/to/jobscript

Gestire i lavori con lpq, lprme lpstat. Se si desidera maggiore flessibilità nel passare argomenti ai propri lavori, è possibile rendere più fanculo lo script batch.sh.

(Ho provato batchprima di seguire questa strada, ma o non funziona come una coda su OSX, oppure lo stavo usando male.)


Mi rendo conto che @arnaud ha specificato "PC merce", il che significa che probabilmente non è OSX, dove ho testato questa soluzione. Tuttavia, questo dovrebbe essere portatile ed è molto più flessibile di batch.
Joe Fusion,

1
Questo è possibile uno degli hack più genuini che abbia mai visto.
Thiago Macedo,

Purtroppo, questo non sembra più funzionare. github.com/apple/cups/commit/…
wdkrnls il

4

Esistono molti sistemi di accodamento, ma spesso sono molto specializzati.

Potresti guardare nello atscheduler. È come cronin qualche modo ma è impostato più come una coda per lavori singoli che per lavori ripetuti. Può "pianificare" cose su criteri diversi dal tempo, come il caricamento del sistema o la sequenza di lavori.

La tua distro preferita avrà quasi sicuramente dei pacchetti.


2

Ho notato che questa domanda ha diversi anni, quindi potrebbe non aiutare il poster originale, ma potrebbe aiutare qualcun altro.

Primo: "task spooler" è la risposta. È abbastanza potente e almeno Fedora ce l'ha.

Ma molti dei server che uso, non posso installare pacchetti arbitrari senza molta seccatura, quindi ho bisogno di qualcosa che sia idealmente puro bash (o perl, o simile).

Dopo aver lottato con questo per un po ', mi è venuta in mente un'implementazione di puro bash che sembra funzionare bene finora. Puoi trovarlo su https://github.com/sitaramc/bq .

È solo uno script bash, quindi l'installazione è banale. Tuttavia, soddisfa i tuoi requisiti secondo e terzo (ma dovrebbe essere banale implementare anche quelli).

Lo script è liberamente commentato e dovresti essere in grado di rivederlo in pochi minuti se lo desideri.


il pacchetto debian è task-spooler, l'eseguibile è "tsp" invece di "ts" che si è scontrato con qualcos'altro. Mi piace anche perché puoi riordinare le attività in coda, non puoi farlo con at / batch.
ergosys,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.