9.2. Wykonywanie zadań w programie meaner3

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:

Poniższy przykład pokazuje konfigurację podtrzymującą tunel na komputer praterm.com.pl, z wykonywanym równoległe przepisywaniem danych na lokalny terminal i serwer praterm.com.pl oraz ze ściąganiem danych z innego komputera wykonywanym co godzinę, ale po zakończeniu przepisywania danych.
: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