System SZARP - dokumentacja techniczna: SZARP v.3.1 | ||
---|---|---|
Poprzedni | Rozdział 9. Instrukcja obsługi programu meaner3 | Następny |
W systemie konieczne jest okresowe wykonywanie pewnych działań - np. sychronizacji danych z innymi komputerami. Można by do tego wykorzystywać standardowe mechanizmy systemu operacyjnego (cron), ale ze względu na konieczność synchronizacji tych działań z zapisem do bazy SZARP, utworzono oddzielny mechanizm, realizowany przez proces zapisujący do bazy - meaner3.
Działanie mechanizmu jest następujące:
Konfiguracja składa się z szeregu sekcji, opisujących zadania do wykonania. Program po zakończeniu cyklu zapisu danych do bazy (wykonywane co 10 minut) rozpoczyna przeglądanie sekcji w kolejności ich wystąpienia w pliku konfiguracyjnym. Jeżeli czas uruchomienia sekcji zgadza się z aktualnym czasem, bądź też sekcja była w poprzednim cyklu wykonana z błędem i ma być powtórzona, wykonywana jest przypisana do sekcji komenda.
Jeżeli wykonywana sekcja jest skonfigurowana do wykonywania równoległego, program przechodzi do przeglądania następnych sekcji. Jeśli nie, przeglądanie sekcji jest przerywane do czasu zakończenia wykonywania ostatnio przeglądanej sekcji.
Wykonywanie sekcji kończy się albo z powodu zakończenia wykonywania przypisanej do niej komendy, albo z powodu przekroczenia limitu czasu dla sekcji. Limit ten jest ustalany dla każdej sekcji osobno, w szczególności sekcja może nie mieć limitu. Jeżeli sekcja skończy się z błędem lub zostanie przerwana z powodu przekroczenia limitu czasu, to będzie powtórzona w następnych cyklach, o ile zostanie to skonfigurowane.
Jeżeli sekcja nie ma limitu czasowego lub jej limit czasowy jest na tyle duży, że jest nadal wykonywana w trakcie kolejnego cyklu w którym powinna być uruchomiona, jest ignorowana.
Sekcja z dużym limitem (lub bez limitu) nie skonfigurowana do wykonywania równoległego blokuje oczywiście przeglądanie sekcji do czasu jej zakończenia.
W pliku konfiguracyjnym (zwykle /etc/szarp/szarp.cfg) wygląda to tak, że w sekcji execute (lub w głównej) powinien znajdować się parametr execute_sections, zawierająca oddzielone spacjami nazwy sekcji do wykonania (kolejność ma znaczenie!). Na przykład:
:execute execute_sections=sekcja1 sekcja2 sekcja3
Każda z sekcji zawiera następujące parametry:
time (parametr wymagany) - czas uruchomienia sekcji w formacie <dzień tygodnia> <miesiąc> <dzień> <godzina> <minuty>. Dzień tygodnia powinien być z zakresu od 1 (poniedziałek) do 7 (niedziela), miesiąc - od 1 do 12, dzień miesiąca - od 1 do 31, godzina od 0 do 23, minuty - od 0 do 59, z tym że minuty są rozpoznawane z dokładnością do 10 minut, a więc nie ma znaczenia, czy wpiszemy 10, 11 czy 19. Można podać kilka wartości oddzielonych przecinkami, bądź też zakresów (w formacie <liczba>-<liczba>). Gwiazdka (*) oznacza całość dostępnego zakresu. Przykład:
:sekcja1 time=1-4,6-7 * * 8-15 10, 30, 50Powyższy zapis oznacza uruchamianie sekcji codziennie oprócz piątków, w godzinach od 8 do 15, w każde nieparzyste 10 minut po okrągłej godzinie.
command_line (parametr wymagany) - komenda do wykonania, przekazywane do wykonania przez powłokę - program sh. Może więc także zawierać instrukcje warunkowe, pętle itp.
retry (parametr opcjonalny) - ilość kolejnych cykli po zakończeniu komendy z błędem, w których będzie ponawiana próba jej wykonania. Domyślnie jest to 0 - brak powtórzeń.
limit (parametr opcjonalny) - limit czasu (w sekundach) na wykonanie komendy. Limit ten jest mierzony zawsze od początku danego cyklu (a nie od chwili uruchomienia). Liczba ujemna oznacza ilość sekund przed końcem obecnego cyklu. Jeżeli więc cykl trwa zwykle 10 minut (600 sekund), to wartość -1 jest równa wartości 599. Jest to także wartość domyślna. Na sekundę przed upływem limitu program otrzymuje sygnał SIGTERM, sekundę później SIGKILL. Wartość 0 oznacza brak limitu (komenda będzie działać do samoistnego zakończenia lub zakończenia programu meaner3).
parallel (parametr opcjonalny) - jeżeli ma wartość yes sekcja dopuszcza możliwość wykonywania innych równolegle z nią. Każda inna wartość oznacza no (i jest to wartość domyślna). W praktyce, zgodnie z opisanym wyżej mechanizmem uruchamiania sekcji, uruchamiane będą kolejno wszystkie sekcje z parametrem parallel ustawionym na "yes" oraz pierwsza z "no".
:execute execute_sections=tunel local_backup praterm_push other_get :tunel time=* * * * * command_line=/opt/szarp/bin/ssh_tunel $prefix$@praterm.com.pl 1234 limit=0 parallel=yes :local_backup time=* * * * * command_line=/usr/bin/rsync $rsync_options$ $szarp_prefix$/$prefix$ \ terminal: parallel=yes :praterm_push time=* * * * * command_line=/usr/bin/rsync $rsync_options$ $szarp_prefix$/$prefix$ \ $prefix$@praterm.com.pl:/opt/szarp :other_get time=* * * * 0 command_line=/usr/bin/rsync $rsync_options$ other:/opt/szarp/dane /opt/szarp
Poprzedni | Spis treści | Następny |
Instrukcja obsługi programu meaner3 | Początek rozdziału | Parametry informacyjne programu |