Jak planować zadania za pomocą liczników systemów w systemie Linux

Jak planować zadania za pomocą liczników systemów w systemie Linux

Tradycyjnym sposobem planowania zadań w systemie Linux jest użycie demona CRON, określenie odstępów czasu i
Polecenia do wykonania w crontabs.

SystemD, stosunkowo nowy system init, który jest obecnie przyjęty przez wszystkie główne rozkłady Linux, między innymi, zapewnia możliwość planowania zadań przy użyciu dedykowanych jednostki, zwany timery. W tym artykule dowiemy się, w jaki sposób są one ustrukturyzowane i kilka przykładów ich użycia.

W tym samouczku nauczysz się:

  • Podstawowa struktura liczników systemów;
  • Jak tworzyć monotoniczne i czasowe liczniki czasu;
  • Jak wymienić i sprawdzić aktywne timery;
  • Jak włączyć liczniki;
  • Jak używać przejściowych timerów;


Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu
Oprogramowanie Systemd
Inny Znajomość podstawowych pojęć systemowych
Konwencje # - Wymaga, aby podane polecenia Linux są wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$ - Wymaga, aby podane polecenia Linux zostały wykonane jako zwykły użytkownik niepewny

Podstawowe użycie



Planowanie zadania za pośrednictwem SystemD obejmuje użycie dwóch różnych typów jednostek: timery I usługi. Pierwsze to pliki jednostkowe z .regulator czasowy rozszerzenie: w nich definiujemy harmonogram zadań i ustawiamy jednostkę serwisową, która powinna zostać uruchomiona. Te ostatnie są najczęstszymi typami jednostek: służą one do definiowania usług w nowoczesnych rozkładach Linuksa i są identyfikowane przez .praca rozszerzenie.

Używamy jednostek serwisowych, aby ustawić rzeczywiste polecenie do wykonania (jeśli nie znasz podstawowych koncepcji systemu, możesz przyjrzeć się naszemu artykułowi na temat usług systemowych).

W zależności od sposobu tworzenia harmonogramu może być timer:

  1. Monotoniczne
  2. Czas rzeczywisty

Timery monotoniczne

SystemD zawiera listę słów kluczowych, których możemy użyć w jednostce timera, aby zaplanować wykonanie zadania określony czas po nastroju predefiniowanego zdarzenia. Słowa kluczowe muszą być używane w [Regulator czasowy] sekcja jednostki timera.

Zobaczmy ich i wyjaśnij ich znaczenie:



Słowo kluczowe Oznaczający
Onactivesec Zaplanuj zadanie w stosunku do czasu, gdy sam jednostka timera jest aktywowana
Onbootsec Zaplanuj zadanie w stosunku do czasu rozruchu systemowego
OnStartUpsec Zaplanuj zadanie w stosunku do czasu, w którym systemD zaczął
ONUNITACTIVESEC Zaplanuj zadanie w stosunku do ostatniego razu, że jednostka serwisowa była aktywna
OnUnitInactivesec Zaplanuj zadanie w stosunku do ostatniego razu, że jednostka serwisowa była nieaktywna

Jak można łatwo odgadnąć od nazwy kluczy, „sekundy” są używane jako domyślna jednostka czasu. Możemy jednak określić inną jednostkę po wartości (e.G. 15m - piętnaście minut). Jak zobaczymy później, słowa kluczowe można łączyć w jednostce timera.

Timery w czasie rzeczywistym

Wydarzenie można również zaplanować w kategoriach „absolutnych”, podobnie jak zdefiniowanie go przez Cron, używając innego Oncalendar Słowo kluczowe i dozwolone kodowania czasowe.

Oto kilka przykładów:



Specyfikacja czasu Wyjaśnienie
Środa 18:00:00 Zadanie zostanie wykonane w każdą środę o 18:00
Mon… śr *-5-27 Zadanie zostanie wykonane 27 maja każdego roku, ale tylko w dniach od poniedziałku do środy
2020-05-27 Zadanie zostanie wykonane 27 maja roku 2020 o 00:00:00
Czw, pt. 2020-*-1,5 11:12:13 Zadanie zostanie wykonane o 11:12:13 pierwszego i piątego dnia każdego miesiąca roku 2020, ale tylko wtedy, gdy dzień jest czwartkiem lub piątek
*: 0/2 Zadanie będzie wykonywane co dwie minuty, zaczynając od minuty 0
15/2 Zadanie będzie wykonywane co dwie godziny, zaczynając od 15:00
cogodzinny Zadanie zostanie wykonane na początku każdej godziny
codziennie Zadanie będzie wykonywane każdego dnia o 00:00:00
co tydzień Zadanie będzie wykonywane w każdy poniedziałek o 00:00:00
miesięczny Zadanie zostanie wykonane pierwszego dnia każdego miesiąca o 00:00:00

W dni powszednie, jeśli określone, muszą być w języku angielskim, albo w skróconym (środa) lub pełnym formularzu (środa) (sprawa nie ma znaczenia).

Możemy podać listę wartości czasowych za pomocą , znak i określ zakres wartości za pomocą . A * znak pasuje do dowolnej wartości. Więcej przykładów można znaleźć w konsultacji Systemd.czas Manpage.

Wymień aktywne timery

Aby wymienić wszystkie aktywne Jednostki zegarowe W naszym systemie możemy uruchomić List-timery Podkomenda Systemctl. Dopóki --Wszystko Opcja jest przekazywana do polecenia, tylko aktywne timery są zawarte w wyniku. Oto przykład wyjścia wyprodukowanego przez polecenie:

$ Systemctl-List-timery NASTĘPNY LEWY OSTATNI PRZESZEDŁ JEDNOSTKA Aktywuje Sun 2020-01-19 19:36:06 CET 5H 15 Min Left Sat 2020-01-18 10:38:59 CET 1 dzień 3H AGO SystemD-TMPfiles-Clean.Timer SystemD-TMPfiles-Clean.Service Mon 2020-01-20 00:00:00 CET 9H Lewa Sun 2020-01-19 00:00:16 CET 14H AGO MAN-DB.Timer Man-DB.Service Mon 2020-01-20 00:00:00 CET 9H Lewa Sun 2020-01-19 00:00:16 CET 14H temu.cień timera.praca 

Raport jest bardzo szczegółowy. Zawiera 6 kolumn, które opisują, w kolejności:

  1. Następnym razem, gdy timer uruchomi się (NASTĘPNY);
  2. Ile razy przed następnym razem, gdy Timer potoczy się ponownie (LEWY);
  3. Ostatni raz trwał czas (OSTATNI);
  4. Ile razy minęło od ostatniego czasu, gdy timer działał (PRZESZEDŁ);
  5. Jednostka timera w którym jest ustawiony harmonogram (JEDNOSTKA);
  6. jednostka serwisowa aktywowane przez timer (Aktywuje).


Przykład świata rzeczywistego

Zbadajmy Man-DB.regulator czasowy regulator czasowy. Aby sprawdzić urządzenie, możemy użyć SystemCTL i kot Podkomenda:

$ Systemctl Cat Man-DB.regulator czasowy

Oto definicja timera:

[Jednostka] Opis = Daily Man-DB Regeneracja Dokumentacja = Man: Mandb (8) [Timer] onCalendar = Daily AccoRuacySec = 12H Tristent = True [Install] WantedBy = Timers.cel 

Pierwszą rzeczą, którą możemy zauważyć, jest [Jednostka] Stanza, co jest wspólne dla wszystkich typów jednostek systemowych. Tutaj służy do podania opisu urządzenia: widzimy, że licznik czasu służy do wykonywania „codziennej regeneracji MAN-DB”.

Sekcja, która najbardziej nas interesuje, jest jednak [Regulator czasowy]. Ta zwrotka jest specyficzna dla jednostek zegarowych: to właśnie tam definiowany jest harmonogram. Oncalendar Słowo kluczowe służy do ustawienia codziennie Harmonogram w czasie rzeczywistym.

Możemy również zaobserwować dwa inne słowa kluczowe: Accoacysec I Uporczywy. Ten pierwszy służy do ustalenia maksymalnego opóźnienia, w którym można uruchomić usługę. W takim przypadku wartość jest 12h, więc polecenie może być opóźnione o maksymalnie 12 godzin. Wartość domyślna dla Accoacysec Jest 1 minuta; Najlepsza dokładność uzyskuje się za pomocą 1NS notacja (1 nanosekunda).



Drugie słowo kluczowe, Uporczywy, przyjmuje wartość logiczną: jeśli jest ustawiona na true, ostatni raz usługa została uruchomiona przez timer. Jeśli z jakiegokolwiek powodu pominięto zaplanowany przebieg, następnym razem, gdy jednostka timera zostanie aktywowana, usługa zostanie uruchomiona natychmiast, jeśli w upływanym czasie zostałby uruchomiony przynajmniej raz. Może to być przydatne, na przykład, aby wykonywać pominięte harmonogramy z powodu zasilanego systemu, następnym razem, gdy maszyna zostanie włączona.

Przyglądając się definicji timera, możemy zauważyć, że usługa, która ma zostać uruchomiona Man-DB.praca). Aby wyraźnie odwoływać się do jednostki serwisowej, musimy użyć Jednostka Słowo kluczowe.

Aktywacja czasu

Aktywacja czasu jest dość prosta. Wszystko, co musimy zrobić, to umieścić to, wraz z usługą, powinno być wyzwalanie, wewnątrz /etc/systemd/system informator. Z wszystkimi plikami uruchamiamy:

$ sudo systemctl start .regulator czasowy

Aby timer był automatycznie aktywowany w rozruchu (lub po osiągnięciu innego konkretnego celu), wszystko, co musimy zrobić, to upewnić się, że ma on [Zainstalować] Stanza, gdzie określamy, kiedy powinna nastąpić aktywacja.

W powyższym przykładzie Wanted Słowo kluczowe służy do ustalenia odwrotnej (słabej) zależności określonej jednostki docelowej (timery.cel - cel osiągnięty dość wcześnie w procesie rozruchu) na konfigurowanym przez nas jednostce timera: przed osiągnięciem tego celu nasza jednostka powinna zostać aktywowana.

Przejściowe timery

Możliwe jest zaplanowanie wykonywania zadań „w locie”, bez ręcznego tworzenia dedykowanego timera i jednostek serwisowych za pomocą Systemd-Run. Polecenie tworzy tymczasowe jednostki (nie przeżyją ponownego uruchomienia) /run/systemd/przejściowy katalog, jeśli będzie działał na całym świecie i wewnątrz /run/user // systemd/przejściowy katalog, jeśli zostanie uruchomiony jako konkretny użytkownik (--użytkownik opcja).

Zobaczmy przykład. Załóżmy, że chcemy zalogować się do pliku do pliku co minutę. Bieglibyśmy:

$ systemd-run --User --on-calendar '*: 0/1'/bin/sh -c "data >> ~/log.TXT "Uruchamianie czasu jako jednostka: run-r81A4FEF38154401BBD8CDBD1E5C19D04.Timer uruchomi usługę jako jednostka: RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.praca 

Jak widać z wyjścia polecenia, utworzono dwie tymczasowe jednostki, RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.regulator czasowy I RUN-R81A4FEF38154401BBD8CDBD1E5C19D04.praca.

Jeśli zbadamy plik dziennika, zobaczymy, że licznik czasu działa poprawnie:

$ cat ~/log.TXT Pon 20 stycznia 2020 11:20:54 CET Pon 20 stycznia 2020 11:21:54 CET Pon 20 stycznia 2020 11:22:54 CET Pon 20 stycznia 2020 11:23:54 : 24: 54 AM CET Pon 20 stycznia 2020 11:25:54 CET Pon 20 stycznia 2020 11:26:54 CET 

Aby usunąć/wyłączyć Przejściowy timer, Wszystko, co musimy zrobić, to zatrzymać. W takim przypadku uruchomilibyśmy:

$ Systemctl-User Stop Run-R81A4FEF38154401BBD8CDBD1E5C19D04.regulator czasowy

Wnioski

W tym samouczku dowiedzieliśmy się, w jaki sposób możemy planować zadania systemowe za pomocą liczników systemów jako alternatywy dla Cronjobs. Widzieliśmy podstawowe struktury stojące za timerami, w jaki sposób możemy zdefiniować harmonogramy monotoniczne i realne za pośrednictwem dedykowanych słów kluczowych, takich jak Onbootsec Lub Oncalendar, Jak wymienić i zbadać aktywne timery, jak je włączyć i wyłączyć.

Wreszcie widzieliśmy, jak używać Przejściowe timery. W tym artykule należy znaleźć wszystko, czego potrzebujesz, aby zacząć od liczników czasu. Aby uzyskać bardziej szczegółowe informacje, jednak przyjrzeć się oficjalnej dokumentacji, online lub konsultacji Systemd.regulator czasowy Manpage.

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Jak stworzyć zadanie cron w Kubernetes
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 22.04 JAMMY Jellyfish…
  • Pobierz Linux
  • Jak okresowo uruchamiać polecenia z Anacron na Linux
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć