Używanie timerów Systemd jako zamiennika zadań Cron
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.
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.
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 AccuracySec
zmiennej. 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.
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ż --all
sprawdzić 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.
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 OnCalendar
na 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.
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.
Usuń obie zmienne OnCalendar
i Persistent
, a następnie dodaj OnBootSec
po 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.
Dodaj OnUnitActiveSec
zmienną 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.
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-calendar
na 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-boot
i --on-unit-active
:
Sprawdź, czy tymczasowy licznik czasu znajduje się teraz w kolejce harmonogramu zadań Systemd, uruchamiając następujące polecenie:
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.timer
w nowej sesji terminala. W tym przypadku możesz zobaczyć, że mój timer jest teraz zaplanowany i przygotowany do uruchomienia systemu.
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