Używanie timerów Systemd jako zamiennika zadań Cron

Używanie timerów Systemd jako zamiennika zadań Cron
Zdjęcie kobiety trzymającej budzik i siedzącej przed laptopem.

Jako użytkownik Linuksa prawdopodobnie znasz cron. Działał jako harmonogram zadań oparty na czasie w systemie Unix przez wiele lat. Teraz wielu użytkowników używa timerów Systemd, aby zastąpić dominujący cron. W tym artykule omówimy podstawy konfiguracji własnego timera Systemd i upewnimy się, że działa on prawidłowo w systemie.

Dlaczego warto używać timerów Systemd zamiast Cron?

Jedną z największych zalet Systemd Timers jest to, że jest w pełni zintegrowany z ekosystemem Systemd. Oznacza to, że bardzo łatwo jest zaplanować i połączyć różne jednostki usług Systemd, co ułatwia automatyzację zadań w porównaniu z tradycyjnym demonem cron.

Terminal pokazujący usługę systemową korzystającą z timera Systemd.

Kolejną zaletą Systemd Timers w porównaniu z Cron jest to, że zapewnia on bardziej szczegółową kontrolę nad tym, jak uruchamiać zaplanowane zadania. Na przykład Systemd Timers ma zmienną OnBootSec, która pozwala opóźnić jednostkę serwisową do momentu, aż upłynie określony czas po pomyślnym rozruchu.

Terminal pokazujący przykładową konfigurację timera ze specjalną zmienną wyzwalającą.

Na koniec, Systemd Timers są również niesamowicie dokładne w porównaniu do standardowego demona cron. Domyślnie może śledzić i uruchamiać zadania do mikrosekundy, używając swojej AccuracySeczmiennej. Jest to niezwykle pomocne, jeśli używasz komputera, który wymaga dokładnych czasów dla zaplanowanych zadań.

Instalowanie timerów Systemd

Timery są wbudowaną funkcją Systemd. Oznacza to, że jeśli używasz Systemd jako demona init, jak w przypadku popularnych dystrybucji Linuksa, takich jak Arch, Fedora i Ubuntu, Twój komputer już korzysta z tej funkcji w niektórych procesach systemowych.

Aby sprawdzić, czy Twoja dystrybucja obsługuje Systemd, możesz uruchomić następujące polecenie:

Spowoduje to wyświetlenie listy wszystkich jednostek, urządzeń i timerów Systemd aktualnie uruchomionych w systemie.

Terminal pokazujący dane wyjściowe polecenia systemctl w dystrybucji Linuksa opartej na Systemd.

Wyświetl istniejące timery

Najprostszym sposobem sprawdzenia, czy na Twoim bieżącym koncie użytkownika działa licznik czasu, jest użycie następującego polecenia:

Za pomocą flagi można również --allsprawdzić każdy licznik w systemie, także te nieaktywne:

Spowoduje to wydrukowanie daty i godziny aktywacji każdego timera, odliczania do tego momentu, czasu, jaki upłynął od ostatniego uruchomienia, nazwy jednostki timera oraz usługi aktywowanej przez każdą jednostkę timera.

Terminal wyświetlający listę wszystkich uruchomionych timerów Systemd w bieżącej sesji.

Tworzenie nowej usługi i timera

Pierwszym krokiem w tworzeniu timera Systemd jest utworzenie lub znalezienie istniejącej usługi, do której można go dołączyć. Wynika to z faktu, że każdy timer musi być dołączony do nadrzędnej jednostki usługi. Ta sekcja przeprowadzi Cię przez proces tworzenia timera dla niestandardowej usługi Systemd.

Zacznij od utworzenia pustych plików „.service” i „.timer” w swoim katalogu domowym:

Otwórz nowy plik usługi przy użyciu ulubionego edytora tekstu:

Wklej następujący szablon do nowego pliku usługi:

Zapisz plik „.service”, a następnie otwórz pusty plik „.timer” za pomocą tego samego edytora tekstu:

Wklej następujący blok kodu do pliku timera:

Przejdź do [Timer]sekcji, a następnie zamień wartość zmiennej OnCalendarna datę i godzinę, o której chcesz, aby Twoja jednostka Systemd działała. W moim przypadku chcę, aby mój program działał dokładnie o 11:43 rano każdego dnia.

Terminal podświetlający niestandardową wartość timera dla zmiennej OnCalendar.

Tworzenie monotonicznego timera

Oprócz ustawienia timera, który działa w określonym dniu, można również utworzyć monotoniczny timer, który działa w odniesieniu do bieżącego czasu sprawności komputera. Jest to przydatne, jeśli planujesz zadanie na maszynie, która nie działa stale, np. na komputerze stacjonarnym lub laptopie.

Aby rozpocząć, otwórz plik „.timer”, a następnie przewiń w dół do odpowiedniej [Timer]sekcji.

Terminal podświetlający lokalizację

Usuń obie zmienne OnCalendari Persistent, a następnie dodaj OnBootSecpo nich przedział czasu, w którym chcesz uruchomić plik jednostki. Na przykład ustawienie „1hr” spowoduje, że Systemd uruchomi polecenie godzinę po pomyślnym uruchomieniu komputera.

Terminal podświetlający zmienną OnBootSec zastępującą oryginalne zmienne czasowe niestandardowego pliku timera.

Dodaj OnUnitActiveSeczmienną tuż poniżej OnBootSec, a następnie podaj interwał, w którym chcesz, aby Twój timer działał nieprzerwanie po uruchomieniu systemu. W moim przypadku ustawię go na „30min”, ponieważ chcę, aby moje zadanie działało co 30 minut po jego pierwszym uruchomieniu.

Terminal podświetlający zmienną OnUnitActiveSec, która konwertuje pojedynczy timer na timer monotoniczny.

Tworzenie timera przejściowego

Jedną z zalet głębokiej integracji Systemd Timer z Systemd jest to, że może on korzystać z innych programów sąsiadujących z demonem init. Na przykład możliwe jest używanie timerów z Systemd-run do tworzenia jednorazowych zadań przejściowych na komputerze.

Aby utworzyć prosty tymczasowy licznik czasu, wklej poniższy wiersz kodu w sesji terminala, a następnie zamień wartość zmiennej --on-calendarna interwał, w którym polecenie ma zostać uruchomione:

Dodaj polecenie, które chcesz uruchomić, na końcu wiersza i naciśnij , Enteraby je zaplanować.

Można również tworzyć tymczasowe monotoniczne timery, używając zmiennych --on-booti --on-unit-active:

Sprawdź, czy tymczasowy licznik czasu znajduje się teraz w kolejce harmonogramu zadań Systemd, uruchamiając następujące polecenie:

Terminal pokazujący stan przejściowego licznika czasu załadowanego do systemu.

Uruchamianie timera Systemd

Aby uruchomić nowy Systemd Timer, musisz się upewnić, że jest on prawidłowo załadowany w bieżącej sesji Systemd. W tym celu skopiuj zarówno swój niestandardowy plik usługi, jak i plik timera do katalogu usług Systemd:

Załaduj ponownie bieżącą konfigurację demona init:

Aktywuj usługę i timer, które utworzyłeś, używając systemctl:

Sprawdź, czy poprawnie załadowałeś nowy timer, uruchamiając: sudo systemctl status my-new-timer.timerw nowej sesji terminala. W tym przypadku możesz zobaczyć, że mój timer jest teraz zaplanowany i przygotowany do uruchomienia systemu.

Terminal pokazujący plik timera uruchomiony w bieżącym systemie.

Nauka planowania zadań za pomocą Systemd Timers to tylko część zrozumienia, jak działa Twoja maszyna Linux pod maską. Zanurz się głębiej w wnętrze tego wspaniałego systemu operacyjnego, czytając nasz artykuł porównawczy na temat Grub i Systemd-boot.

Źródło obrazu: Alexandr Podvalny przez Unsplash . Wszystkie zmiany i zrzuty ekranu autorstwa Ramces Red.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *