Blog / Linux
Linux 7 min min čítania

systemd timers namiesto cronu

21.03.2026 · 5ok

Cron funguje. systemd timers ale vedia veci, ktoré cron nikdy vedieť nebude.

systemd timers namiesto cronu

Cron má jednu obrovskú výhodu: každý ho pozná. A jednu nevýhodu: keď zlyhá, dozviete sa to e-mailom na root@localhost, ktorý nikto nečíta.

systemd timers riešia presne toto.

Základ

Timer sa skladá z dvoch súborov — .service (čo sa má spustiť) a .timer (kedy).

# /etc/systemd/system/backup.service
[Unit]
Description=Nočná záloha
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
# /etc/systemd/system/backup.timer
[Unit]
Description=Spusti zálohu každú noc

[Timer]
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target
systemctl enable --now backup.timer
systemctl list-timers

Čo cron nevie

Persistent=true — ak bol stroj v čase spustenia vypnutý, úloha sa spustí hneď po štarte. Cron ju jednoducho preskočí.

RandomizedDelaySec — rozloží záťaž, keď máte päťdesiat strojov, ktoré by inak všetky spustili zálohu presne o 2:30.

Logy na jednom mieste. journalctl -u backup.service vám ukáže výstup posledného behu aj históriu. Žiadne presmerovávanie do súborov.

Závislosti. After=network-online.target znamená, že sa úloha nespustí, kým nie je sieť hore. V crone to riešite sleep 30 a nádejou.

Resource limity. MemoryMax=, CPUQuota=, IOWeight= — cron nič také nemá.

Monitoring

Toto je hlavný dôvod, prečo sme prešli. Prometheus node_exporter zbiera stav systemd unitov, takže zlyhaná úloha vyvolá alert rovnako ako čokoľvek iné:

node_systemd_unit_state{name="backup.service",state="failed"} == 1

Žiadne MAILTO=, žiadne parsovanie logov. Zlyhaná úloha je normálna metrika.

Kedy zostať pri crone

Ak máte jeden server, tri úlohy a funguje to — nemeňte to. Migrácia dáva zmysel pri desiatkach strojov alebo tam, kde potrebujete, aby zlyhanie úlohy bolo viditeľné.

Napísal
5ok
Zdieľať