Prosty system kolejkowania?

10

Biorąc pod uwagę towarowy komputer PC, chcielibyśmy go używać do wykonywania niektórych zadań w tle przez całą dobę.

Zasadniczo chcielibyśmy mieć takie polecenia jak:

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

Dodane zadania należy po prostu umieścić w kolejce i wykonywać jeden po drugim w tle (uruchamianie po wylogowaniu z powłoki).

Czy jest jakiś prosty skrypt / program, który to robi?

Dagnele
źródło

Odpowiedzi:

7

Istnieje standardowe batchpolecenie, które robi mniej więcej to, czego szukasz. Dokładniej, batchwykonuje zadania, gdy obciążenie systemu nie jest zbyt wysokie, pojedynczo (więc nie wykonuje żadnej równoległości). batchKomenda jest częścią atpakietu.

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- przestań być zły”
źródło
Błędem jest twierdzenie, że batchpolecenie „nie wykonuje żadnej równoległości”. Zazwyczaj występuje opóźnienie 60 sekund między rozpoczęciem jednego zadania a rozpoczęciem następnego; nie ma jednak nic, co sprawiłoby, że następne zadanie czeka na zakończenie pierwszego - atdz przyjemnością wykopie zadania z kolejki wsadowej, gdy tylko wartość ustawiona przez -bopcję minie (patrz atdstrona podręcznika ).
rsaw 26.04.16
Batch nie serializuje zadań ściśle, więc jeśli masz jeden wspólny zasób, odpowiedź @sitaram (bufor zadań) powinna działać lepiej.
ergosys
5

Innym rozwiązaniem jest użycie lpdi utworzenie niestandardowego „sterownika drukarki”, który uruchamia zadania. Znajomy pomógł mi to rozwiązać, gdy miałem podobną prośbę. Utwórz taki skrypt i umieść go w /tmp/batch.sh:

#!/bin/bash

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

Następnie uruchomić:

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

Spowoduje to uruchomienie kolejki i możesz utworzyć więcej, używając innych nazw zamiast partii 1. Dodaj pracę za pomocą:

lp -d batch1 /path/to/jobscript

Zarządzaj pracy z lpq, lprm, i lpstat. Jeśli chcesz mieć większą elastyczność w przekazywaniu argumentów do swoich zadań, możesz uczynić skrypt batch.sh bardziej intuicyjnym.

(Próbowałem batchprzed zjechaniem tą trasą, ale albo nie działa ona jako kolejka w OSX, albo używałem jej źle).

Joe Fusion
źródło
Zdaję sobie sprawę, że @arnaud określił „komputer towarowy”, co oznacza, że ​​prawdopodobnie nie jest to OSX, w którym testowałem to rozwiązanie. Powinno to być jednak przenośne i jest znacznie bardziej elastyczne niż batch.
Joe Fusion
1
Jest to jeden z najbardziej autentycznych hacków, jakie kiedykolwiek widziałem.
Thiago Macedo,
Niestety wydaje się, że to już nie działa. github.com/apple/cups/commit/…
wdkrnls
4

Istnieje wiele systemów kolejkowania, ale często są one bardzo wyspecjalizowane.

Możesz zajrzeć do atharmonogramu. Jest to cronpod pewnymi względami, ale bardziej przypomina kolejkę dla zadań jednorazowych niż dla zadań powtarzalnych. Może „planować” rzeczy według kryteriów innych niż czas, takich jak obciążenie systemu lub sekwencja zadań.

Twoja ulubiona dystrybucja prawie na pewno będzie miała dla niej pakiety.

Caleb
źródło
2

Zauważyłem, że to pytanie ma kilka lat, więc może nie pomóc oryginalnemu plakatowi, ale może pomóc komuś innemu.

Po pierwsze: „bufor zadań” jest odpowiedzią. Jest dość potężny i przynajmniej Fedora go ma.

Ale na wielu serwerach, których używam, nie mogę instalować dowolnych pakietów bez większych problemów, więc potrzebuję czegoś, co byłoby idealnie czystym bashem (lub perlem lub podobnym).

Po dłuższej walce z tym, wymyśliłem czystą implementację basha, która do tej pory wydaje się działać dobrze. Można go znaleźć na https://github.com/sitaramc/bq .

To tylko jeden skrypt bash, więc instalacja jest prosta. Jednak to eliminuje twoje drugie i trzecie wymagania (ale ich implementacja również powinna być trywialna).

Skrypt jest swobodnie komentowany i powinieneś być w stanie go przejrzeć za kilka minut, jeśli chcesz.

sitaram
źródło
pakiet debian jest buforem zadań, plik wykonywalny to „tsp” zamiast „ts”, który kolidował z czymś innym. Podoba mi się to również dlatego, że można zmieniać kolejność zadań w kolejce, nie można tego zrobić w usłudze / batch.
ergosys