Systemd timer - przykłady
Opcje konfiguracji timerów
Jako dodatek do poprzedniego artykułu opisującego timery w systemd, poniżej przedstawiam kilka możliwości konfiguracyjnych.
W sekcji [Timer]
dostępne są opcje definiujące harmonogram:
OnCalendar
Harmonogram kalendarzowy (data i godzina). Składnia to np. DayOfWeek Year-Month-Day Hour:Minute:Second
.
Można używać symboli wieloznacznych *
, zakresów (Mon..Fri
), list (np. Mon,Wed,Fri
) czy specjalnych zwrotów (@daily
, @hourly
itd., np. OnCalendar=*-*-* 00:00:00
dla codziennie o północy). Ta opcja pozwala ustawić dowolną datę lub godzinę.
Przykład:
- `OnCalendar=Mon..Sun *-*-* 05:00:00` – 5:00 każdego dnia tygodnia.
- `OnCalendar=Fri *-*-* 18:00:00` – piątek o 18:00.
Protip
Można dodać wiele wpisów `[Timer]` w jednym pliku dla różnych terminów (np. inne czasy w dni robocze i weekendy).
Składnię testujemy poleceniem `systemd-analyze calendar "<wyrażenie>"`, które pokaże kolejne wystąpienia.
OnBootSec
Czas (np. 5min
, 1h
, 30s
) po starcie systemu. Timer wyzwala usługę określoną liczbę czasu od uruchomienia systemu. Odpowiada to konstrukcji @reboot
z crona (w przykładzie migracji cron na timer, @reboot
→ OnBootSec=1s
).
OnStartupSec
Czas po uruchomieniu menedżera usług systemd. Dla usług systemowych zwykle jest to prawie to samo co OnBootSec
. Bywa przydatne w usługach użytkownika (user services), które startują dopiero przy logowaniu użytkownika.
OnUnitActiveSec
Czas od ostatniego (poprzedniego) uruchomienia powiązanej usługi. Dzięki temu można np. cyklicznie powtarzać zadanie co określony czas, licząc od zakończenia poprzedniego wywołania.
OnUnitInactiveSec
Czas od wyłączenia (poprzedniego zakończenia) powiązanej usługi. Podobnie jak powyżej, lecz liczony od momentu zakończenia, a nie uruchomienia usługi.
Persistent
Opcja logiczna (true/false
). Jeżeli ustawiona na true
, to timer nadrobi pominięte wywołania po restarcie systemu. Domyślnie Persistent
jest wyłączone
Przykład użycia:
AccuracySec
Czas precyzji wywołania, domyślnie 1min
. Timer zaplanowany na daną godzinę może zostać uruchomiony w oknie od tej godziny do +AccuracySec
, aby zgrać wybudzenia i oszczędzać energię. Im mniejsza wartość (np. 1us
), tym większa dokładność.
RandomizedDelaySec
Losowe opóźnienie dodawane do czasów zdefiniowanych powyżej, by zapobiec jednoczesnemu wybudzaniu wielu timerów. Domyślnie 0
. Wartość można ustawić, gdy potrzebujemy rozproszyć obciążenie. Użyteczne w środowiskach współdzielonych między wieloma użytkownikami.
Przykłady zastosowania
Kilka praktycznych przykładów:
Automatyczne kopie zapasowe
Na przykład co noc o 3:00. Utwórzmy usługę backup.service
:
# /etc/systemd/system/backup.service
[Unit]
Description=My backup service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
Następnie plik timera backup.timer
:
# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Taki timer uruchomi backup codziennie o 3:00. Dzięki Persistent=true
wykonanie zostanie nadrobione po restarcie, jeśli system był włączony po czasie 3:00.
Czyszczenie katalogów tymczasowych
Na przykład codziennie o 1:00 czyść katalog /tmp
. Tworzymy usługę clean.service
:
i timer clean.timer
:
[Unit]
Description=Timer czyszczenia /tmp
[Timer]
OnCalendar=daily
Persistent=true
Unit=clean.service
[Install]
WantedBy=timers.target
Wyrażenie OnCalendar=daily
to skrót dla *-*-* 00:00:00
(czyli północ każdego dnia). Skrypt clean_tmp.sh
może usuwać stare pliki w /tmp
.
📬 Potrzebujesz czegoś więcej?
Napisz na: chris@terminalzone.eu
Z chęcią odpowiem na Twoje pytania i dobiorę rozwiązanie dopasowane do Twoich potrzeb!