Blog IT, Blog Marketing

nq - prosta kolejka zadań

nq - prosta kolejka zadań

Marcin Sarna , 28.01.2021 r.

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:

  1. każde zadanie ma plik wyjściowy flock w rodzaju TIMESTAMP.PID
  2. 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, dependsall:

% nq make clean
% nq make depends
% nq make all
% fq

Najnowsze oferty pracy:

Polecane wpisy na blogu IT:

Szukasz pracownika IT?

Dostarczymy Ci najlepszych specjalistów z branży IT. Wyślij zapytanie

Wyrażam zgodę TeamQuest Sp. z o.o. na przetwarzanie moich danych osobowych w celu marketingu produktów i usług własnych TeamQuest, w tym na kontaktowanie się ze mną w formie połączenia telefonicznego lub środkami elektronicznymi.
Administratorem podanych przez Ciebie danych osobowych jest TeamQuest Sp. z o.o., z siedzibą w Warszawie (00-814), ul. Miedziana 3a/21, zwana dalej „Administratorem".
Jeśli masz jakiekolwiek pytania odnośnie przetwarzania przez nas Twoich danych, skontaktuj się z naszym Inspektorem Ochrony Danych (IOD). Do Twojej dyspozycji jest pod adresem e-mail: office@teamquest.pl.
W jakim celu i na jakiej podstawie będziemy wykorzystywać Twoje dane? Dowiedz się więcej