Zadania cykliczne na NAS-ie: cron z logiem i powiadomieniami o błędach
Strona Jobs w Bucket & Code Server IDE uruchamia polecenia według harmonogramu cron i zachowuje log każdego wykonania. Zadanie może powiadamiać o błędzie w logach systemowych QTS oraz przez Telegram, Discord, Slack lub e-mail po dodaniu adresów tych usług.
- Harmonogrampola cron i następne wykonania
- Poleceniebash, uruchamiany jako root
- Uruchom terazwykonanie i jego log
- Wbudowanewłasne zadania pakietu
- Powiadomienialogi systemowe i czat
Ilustracje pochodzą z testowego NAS-a i pokazują etykiety wersji 1.0.0-49. Adres na ilustracji Notifications jest przykładowy.
01Strona Jobs
Strona ma dwie zakładki. Scheduled pokazuje zadania cron: wbudowane zadania pakietu i zadania utworzone przez konta. Operations pokazuje ostatnie 50 długich operacji bvsd, takich jak instalacje i przenoszenie danych, od najnowszej.
Wiersz Scheduled pokazuje zadanie i właściciela, harmonogram słownie i jako zapis, następne wykonanie oraz przełącznik włączania. Otwórz wiersz, aby zobaczyć polecenie, wykonania i logi. Znacznik u góry podaje strefę czasową NAS-a; wszystkie godziny na stronie są w tej strefie.
- Deweloper tworzy zadania i zmienia lub usuwa własne. Administrator zmienia każde zadanie.
- Każde zalogowane konto, także obserwator, odczytuje listę, polecenia i logi.
02Zadanie od podstaw
- Naciśnij New job i wpisz nazwę w Name.
- Wpisz Schedule: pięć pól (minuta godzina dzień miesiąc dzień tygodnia), sześć z sekundami na początku albo
@daily,@hourly,@every 90m. Przykłady pod polem wypełniają je. Ramka poniżej opisuje harmonogram i pokazuje następne pięć wykonań w strefie NAS-a. Prefiks taki jakCRON_TZ=Europe/London 0 3 * * *uruchamia zadanie w innej strefie. - Wpisz Command (bash) tak jak w terminalu. Wiele wierszy działa jako jeden skrypt, a ich wyjście trafia do logu wykonania.
- Runs: On the NAS albo w jednym ze środowisk, gdzie polecenie widzi narzędzia i biblioteki tego systemu. Working folder jest ścieżką względem
projects/w katalogu danych lub pełną ścieżką; puste pole oznaczaprojects/. W środowisku widać tylkoprojects/, jako/projects. - Timeout in seconds: wykonanie trwające dłużej jest zatrzymywane i oznaczane jako przekroczenie limitu. Nowe zadanie ma 3600; 0 oznacza brak limitu. When the previous run is still going: Skip this run albo Run it after the previous one; wtedy czeka najwyżej jedno wykonanie.
- Notify on failure i On są zaznaczone dla nowego zadania. Wyłączone zadanie zachowuje ustawienia i działa tylko ręcznie. Naciśnij Create the job.
W noce zmiany czasu zadania stosują regułę Debian cron. Zadanie z * lub */N na początku pola minut lub godzin, @hourly albo @every podąża za upływem czasu: jesienią działa przy obu przejściach powtarzanej godziny, a wiosną pominięta godzina nie występuje. Pozostałe zadania wykonują każdy termin raz. Termin w powtarzanej godzinie jest wykonywany raz, a w pominiętej tuż po zmianie czasu.
03Uruchom teraz, wykonania i logi
Run now w oknie zadania rozpoczyna dodatkowe wykonanie od razu, chyba że to zadanie już działa. Okno pokazuje początek, czas trwania, wynik i kod wyjścia każdego wykonania. Wybierz wykonanie, aby przeczytać log pod listą.
- Pierwszy i ostatni wiersz logu pochodzą z bvsd. Pierwszy podaje wykonanie, zadanie, czas i inicjatora: konto albo harmonogram. Jego czas jest w UTC, a lista wykonań pokazuje czas NAS-a. Ostatni podaje wynik i czas trwania.
- Zadanie zachowuje ostatnie 100 wykonań, każde z ostatnimi 4 KB wyjścia. Pełny log wykonania jest przechowywany przez 30 dni.
- Błąd lub przekroczenie czasu dodaje czerwone last run failed obok zadania na liście, a kafelek Jobs na Overview zlicza je pod failing.
- Po zakończeniu polecenia uruchomione przez nie procesy w tle działają dalej. Przekroczenie czasu, usunięcie zadania lub zatrzymanie pakietu wysyła całej grupie procesów SIGTERM, a po 5 sekundach SIGKILL.
- Edit zmienia zadanie. Delete zatrzymuje trwające wykonanie i usuwa zadanie, jego wykonania oraz logi. Te przyciski widzą tylko właściciel i administrator; inni mają Close.
04Wbudowane zadania
Zadania oznaczone built in należą do bvsd; ich właścicielem jest system.
| Zadanie, termin | Co robi |
|---|---|
| Kopia zapasowa domyślnie @daily | kopia zapasowa skonfigurowana na stronie Kopie zapasowe, gdy włączono tam Scheduled backups; ta strona przechowuje harmonogram i przełącznik |
| Konserwacja codziennie o 03:30 | usuwa z tmp/ w katalogu danych elementy niezmieniane od 10 dni i rotuje log/audit.log po przekroczeniu 10 MB |
| Opróżnianie kosza codziennie o 03:45 | usuwa elementy przeniesione do trash/ w katalogu danych ponad 7 dni temu: usunięte repozytoria, buckety i katalogi domowe kont |
| Odświeżanie katalogu toolchainów codziennie o 04:15 | pobiera podpisany katalog toolchainów i używa go, jeśli podpis jest poprawny, a katalog nowszy |
| Rotacja logów nginx co godzinę, w minucie 7 | zmienia nazwę nginx-access.log lub nginx-error.log na .1 po przekroczeniu 20 MB, zachowuje pięć starych plików i poleca nginx ponownie otworzyć logi |
Administrator może zmienić harmonogram, limit czasu, zachowanie podczas trwającego wykonania i powiadomienie o błędzie wbudowanego zadania oraz je wyłączyć. Nazwa, polecenie, środowisko i katalog roboczy są stałe; nie ma Delete.
05Powiadomienia
bvsd zapisuje każde powiadomienie w logach systemowych QTS. Notifications na stronie System wysyła je także do usług czatu i poczty przez adresy URL shoutrrr: Telegram, Discord, Slack, e-mail, webhook i inne.
- Pod Addresses (shoutrrr URLs) naciśnij Add an address i wklej jeden URL na usługę, na przykład
telegram://<token>@telegram?chats=<chat id>lubgeneric+https://example.com/hook. - Pod Also sent to the addresses odznacz to, co ma pozostać wyłącznie w logach systemowych. W nowej instalacji zaznaczone są wszystkie cztery opcje.
- Naciśnij Save.
| Przełącznik | Powiadomienie przychodzi, gdy |
|---|---|
| Zadanie kończy się błędem | wykonanie cron z powiadomieniem o błędzie nie powiedzie się lub przekroczy czas albo nie powiedzie się operacja: budowanie, przenoszenie danych lub instalacja |
| Kończy się kopia zapasowa | zakończy się tworzenie kopii, weryfikacja lub odtwarzanie, także pomyślne, albo zaplanowana kopia nie może się rozpocząć |
| Moduł restartuje się w pętli | proces stale kończy działanie i uruchamia się ponownie |
| Certyfikat | przesłany certyfikat ma najwyżej 30 dni ważności, nginx wrócił do certyfikatu samopodpisanego albo bvsd utworzył nowy samopodpisany certyfikat |
| brak, wysyłane zawsze | ustawienia odrzucono przy starcie, znaleziono niedokończone przenoszenie danych, zakończono pozostałe procesy albo nie udało się zapisać konfiguracji |
- Powiadomienie na ten sam temat jest wysyłane najwyżej raz na 10 minut, także do logów systemowych. Następne podaje liczbę wstrzymanych powiadomień.
- Każdy adres otrzymuje osobną wysyłkę z limitem 10 sekund. Błąd jest zapisywany tylko ze schematem URL-a, ponieważ reszta adresu zawiera token.
- Tylko administrator zmienia adresy i przełączniki. Inne konta widzą przełączniki i schemat każdego URL-a.
Administrator NAS-a może także ustawić adresy przez gniazdo CLI pakietu. Wysłana lista zastępuje poprzednie adresy, a przełączniki zachowują wartości:
/usr/bin/bucketvs/bin/curl --unix-socket /usr/bin/bucketvs/var/run/bvsd-cli.sock \
-X PUT -H 'Content-Type: application/json' \
-d '{"notify":{"shoutrrr_urls":["telegram://<token>@telegram?chats=<chat id>"]}}' \
http://bvsd/api/v1/settings
06Root i dane odczytywane przez inne konta
- Polecenie zadania działa jako root, na NAS-ie lub w środowisku, niezależnie od autora. Deweloper może tworzyć zadania, więc może wykonać dowolne polecenie na NAS-ie jako root. Przydzielaj tę rolę tylko osobom, którym dałbyś roota na NAS-ie.
- Zadanie działa tylko wtedy, gdy właściciel jest włączonym deweloperem lub administratorem (od wersji 1.0.0-52). Gdy jest wyłączony lub ma rolę członka albo obserwatora, każdy termin zostaje zapisany jako pominięte wykonanie z przyczyną, na przykład its owner ola is disabled, a Run now podaje ten sam powód; trwające wykonanie jest zatrzymywane. Zadanie wraca po włączeniu konta lub przywróceniu roli dewelopera. Usunięcie konta usuwa jego zadania, wykonania i logi. Wbudowane zadania działają niezależnie od stanu konta.
- Każde zalogowane konto, także obserwator, odczytuje polecenia wszystkich zadań i ich wyjście. Nie umieszczaj haseł ani tokenów w poleceniu: zapisz je w pliku pod
etc/w katalogu danych, dostępnym do odczytu tylko dla roota (chmod 600), i niech polecenie czyta ten plik.