Narzędzie powłoki do szybkiego uruchomienia kilku procesów, bez kłopotliwej konfiguracji.
Kolejkowanie zadań
Oprogramowanie nq jest dostępne na tej stronie (i oczywiście w dobrych sklepach… yyy repozytoriach pakietów). Te małe narzędzia pozwalają na tworzenie bardzo lekkich systemów kolejkowania zadań, które nie wymagają konfiguracji, konserwacji czy nadzoru. nq powinien działać na każdym systemie zgodnym z POSIX.1-2008.
Zamierzonym celem jest kolejkowanie ad-hoc poleceń shella, np. w celu skompilowania pakietów z kilku plików Makefile, pobierania wielu plików pojedynczo czy uruchamiania testów porównawczych w kilku konfiguracjach. Oczywiście jak każde solidne narzędzie *nixowe może być używany w praktycznie dowolny sposób.
Kolejność zadań jest wymuszana przez czas pobierany przez nq natychmiast po uruchomieniu. Synchronizacja odbywa się na poziomie systemu plików. Dokładność timera jest liczona w milisekundach. To pozwala na zastosowanie nq nawet w dość wymagających przypadkach.
Jak to działa?
Wykonywanie zadania przebiega następująco:
- każde zadanie ma plik wyjściowy flock w rodzaju TIMESTAMP.PID
- każde zadanie rozpoczyna się dopiero po odblokowaniu wszystkich wcześniejszych plików flock
Dlaczego jest używany flock? Ponieważ blokuje file handle współdzielony przez exec z procesem potomnym (rzeczywiście wykonywanym zadaniem) i odblokowuje go dopiero gdy plik zostanie zamknięty (czyli zwykle po zakończeniu zadania). To gwarantuje prawidłową kolejność wykonywania zadań i to, że kolejne zadanie wykona się prawidłowo jeżeli zależy od rezultatu poprzedniego zadania.
Jak tego używać?
Nowe zadania umieszczasz w kolejce używając polecenia nq CMDLINE
. Identyfikator zadania jest natychmiast wyświetlany (chyba, że program działa w trybie wyciszonym przy użyciu przełącznika -q
). Nq detachuje się (odłącza) natychmiast, uruchamiając zadanie w tle. STDOUT i STDERR są oczywiście przekierowywane do pliku z logami.
nq stara się aby plik dziennika aktualnie działającego zadania miał ustawiony +x (wykonywalność). Dzięki temu możesz użyć ls -F
, aby uzyskać szybki przegląd stanu swojej kolejki.
Rozszerzenie pliku z logami to w rzeczywistości PID, więc znając ten numer możesz łatwo ubijać niepożądane procesy. Pamiętaj, że przed uruchomieniem zadania jest to PID samego nq, więc możesz też anulować zadanie znajdujące się dopiero w kolejce.
Sprawdź oferty pracy na TeamQuest
Pliki z logami mają też na początku linię z exec
dzięki czemu możesz ponownie przesłać zadanie, wykonując je po prostu jako plik poleceń powłoki, np. poprzez sh $ jobid
.
Aby poczekać na zakończenie zadań użyj nq -w
, wyświetlając identyfikatory zadań na które chcesz czekać. Domyślnie są to wszystkie zadania. Możesz też sprawdzić czy są zadania, na które trzeba poczekać (przełącznik -t
).
Domyślnie identyfikatory zadań są zapisywane w poszczególnych katalogach ale można ustawić wartość $NQDIR
aby umieścić je w innym miejscu.
Przykład utworzenia zadań clean, depends i all:
% nq make clean
% nq make depends
% nq make all
% fq