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.