Náhrada cronu pomocní systemd.timer
Systemd.timer umožňuje volat service v pravidelných intervalech, podobně jako se volají úlohy v cronu.
Nejprve je potřeba vytvořit unitu .service.
Na úlohy, které doběhnou a skončí se hodí typ oneshot
. Oblíbený příklad je pravidelné volání programu fstrim
:
Připravíme si soubor /etc/systemd/system/fstrim.service
:
[Unit]
Description=Discard unused blocks
[Service]
Type=oneshot
ExecStart=/sbin/fstrim -a
Můžeme reloadnout systemd a zkusit fstrim spustit:
systemctl daemon-reload
systemctl start fstrim
V logu (systemctl status fstrim
) bychom měli vidět úspěšné dokončení běhu programu a ukončení service. Pokud je vše v pořádku, můžeme nastavit timer.
Obsah souboru /etc/systemd/system/fstrim.timer
:
[Unit]
Description=Discard unused blocks once a week
Documentation=man:fstrim
[Timer]
OnCalendar=weekly
AccuracySec=1h
Persistent=true
[Install]
WantedBy=timers.target
Soubor .timer
se musí jmenovat stejně jako .service
, kterou chceme pravidelně spouštět.
Opět reloadneme systemd:
systemctl daemon-reload
A aktivujeme timer:
systemctl enable fstrim.timer
systemctl start fstrim.timer
A je to.
Pozor na logy
Bohužel nefunguje správně logování služeb, které běží jen velmi krátkou dobu.
Záznamy v logu (journalctl
) jsou, jen nemají všechny atributy. Tedy vyhledávání
pomocí journalctl -u fstrim
nemusí vždy nalézt všechny výsledky. Je tedy nutné filtrovat jinak, například pomocí jména procesu. Tento bug je
řešen jako issue 2913.