Jak planować zadania za pomocą liczników systemów w systemie Linux
- 1597
- 67
- Seweryn Augustyniak
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
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:
- Monotoniczne
- 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:
- Następnym razem, gdy timer uruchomi się (NASTĘPNY);
- Ile razy przed następnym razem, gdy Timer potoczy się ponownie (LEWY);
- Ostatni raz trwał czas (OSTATNI);
- Ile razy minęło od ostatniego czasu, gdy timer działał (PRZESZEDŁ);
-
Jednostka timera
w którym jest ustawiony harmonogram (JEDNOSTKA); -
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ć
- « Nie można zlokalizować pakietu - błąd instalacji pakietu Apt
- Zainstaluj pierścień, alternatywa Foss VoIP Skype »