Nastavení časovače systemd

Z DCEwiki
Verze z 17. 4. 2024, 13:04, kterou vytvořil Keny (diskuse | příspěvky) (založena nová stránka s textem „Načasování realizace plánované akce je u každého systému klíčová záležitost, bez které nelze fungovat. U starších verzí unixových systémů hlídal správné načasování démon '''cron'''. U novějších verzí linuxových systémů, které používají '''systemd''' může být nahrazen službou '''timers.target''', která hlídá čas, kdy se mají jím spravované ''unity'' spustit, zastavit, či restartovat. Tak jako veškerá…“)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Skočit na navigaci Skočit na vyhledávání

Načasování realizace plánované akce je u každého systému klíčová záležitost, bez které nelze fungovat. U starších verzí unixových systémů hlídal správné načasování démon cron. U novějších verzí linuxových systémů, které používají systemd může být nahrazen službou timers.target, která hlídá čas, kdy se mají jím spravované unity spustit, zastavit, či restartovat.

Tak jako veškerá konfigurace systemd, i časování se nastavuje přes unity, které mají obvykle příponu .timer, které pracují s direktivami [Timer] kde se řeší načasování a [Install], přes kterou se nastavuje, kdy se časovač aktivuje.

Aktivace/Deaktivace unity pro načasování

Přehled aktuálně spuštěných časovačů lze získat

$ systemctl list-timers VZOREK

VZOREK, umožňuje odfiltrování z výstupu na základě názvu (resp. regulárního výrazu) unity které nás zajímají. Např. apt* vypíše všechny unity aktuálně spuštěných časovačů, jejichž názvy začínají řetězcem "apt". Ovšem to dává smysl jen u většího počtu spuštěných časovačů.

Poznámka Kompletní výpis všech časovačů, tj. včetně neaktivních, se udělá pokud se přidá před VZOREK ještě atribut --all

Systémové časovače mají uloženy svá časová razítka v adresáři s prefixem stamp- v adresáři /var/lib/systemd/timers Existující razítko znamená, že služba běží a čeká až nastane její čas.

Poznámka Lze zakládat také časovací unity v rámci uživatelského účtu. Ty mají svá časová razítka uložená v adresáři v ~/.local/share/systemd/

Načasování

Načasování unity lze provést v rámci direktivy [Timer] buď navázáním na určitou akci, resp. časový interval, jaký ní uplyne (monotonic). Nebo navázáním na skutečný čas (real-time)

Časový interval

Se nastavuje tam, kde má něco fungovat jen po určitou dobu. Nebo se naopak po určité době něco zapnout. Čas lze specifikovat s využitím následujících řetězců od mikrosekund po roky:

usec
msec
seconds
minutes
hours
days
weeks
months
years

Prostřednictvím následujících parametrů:

OnActiveSec
Kontroluje, čas který uplynul od okamžiku, kdy došlo k aktivaci časovače
OnBootSec
Ohlídá čas který uplynul od okamžiku zavedení jádra systému
OnStartupSec
Je klíčový pro časovače, které se spouštějí v rámci uživatelsky spouštěných služeb. Pro systémové unity by měl tenhle parametr výsledek stejný efekt jako u OnActiveSec.
OnUnitActiveSec
Hlídá čas, který uplynul od okamžiku kdy došlo je spuštění služby (service) hlídané časovačem.
OnUnitInactiveSec
Hlídá čas, který uplynul od okamžiku kdy došlo k vypnutí služby (service) hlídané prostřednictvím časovače.

V rámci spuštěné session lze využít k časování systemd-run

https://documentation.suse.com/smart/systems-management/html/systemd-working-with-timers/index.html

Reálný čas

Naopak parametr OnCalendar= umožňuje načasovat opakované spuštění.

Zpracovává dva až čtyři řetězce. Přes první (volitelný) lze nastavit den týdnu – podobně jako cronu, je akceptována zkratka anglického názvu dne Mon, Tue, atp. Jednotlivé dny jsou odděleny čárkou a lze nastavity i rozsah, pomocí dvou teček, podobně jakou u bashe. Parametr může mít více instancí, pokud má mít časovač v různých dnech jiný čas spuštění. Např.:

OnCalendar=Mon..Fri 22:30
OnCalendar=Sat,Sun 20:00

Druhý, rovněž volitelný řetězec lze nastavit konkrétní den v měsíci, resp. roce. V případě, že to pro časovač není důležité, uveden být nemusí.

Třetím řetězcem je nastavení konkrétního času, za kterým může ještě následovat příslušná časová zóna (čtvrtý řetězec). Pro to, jak má vypadat řetězec příslušné zóny viz timedatectl list-timezones

Před uložením lze zkontrolovat nastavení na příkazovém řádku následujícím způsobem:

~# systemd-analyze calendar "Tue *-04..07-* 13:30:00 Europe/Prague"
Normalized form: Tue *-04..07-* 13:30:00 Europe/Prague
    Next elapse: Tue 2024-04-16 13:30:00 CEST         
       (in UTC): Tue 2024-04-16 11:30:00 UTC
       From now: 57min left

V tomto případě dojde ke spuštění akce každé úterý, od dubna do července, vždy ve 13:30 s tím že k prvnímu spuštění dojde za 57 minut od okamžiku testu


Nastavení

Příklad

/srv/1022/nvidia_gpu/etc/systemd/system/sched-reboot.timer


[Unit]
Description=Načasovaný restart

[Timer]
OnCalendar=Tue *-04..07-* 13:30:00
Unit=sched-reboot.service

[Install]
WantedBy=timers.targe

/srv/1022/nvidia_gpu/etc/systemd/system/sched-reboot.service

[Unit]
Description=Restart lab-dc každé úterý ve 13:30
[Service]
Type=simple
ExecStart=systemctl reboot --no-block
[Install]
WantedBy=default.target




unitu s příponou .service


https://wiki.archlinux.org/title/systemd/Timers