Jak hlídat cron a zálohy, aby nepadaly potichu

Cron nikomu nenapíše, že záloha spadla. Pošle nanejvýš e⁠-⁠mail na lokální účet root, který nikdo nečte. Spolehlivější je otočit to: úloha po úspěšném dokončení dá vědět sama.

David Azarian · aktualizováno 26. 10. 2026 · 5 min čtení

Princip heartbeatu

Každá hlídaná úloha dostane unikátní adresu. Na konci úspěšného běhu ji zavolá. Monitorovací služba ví, jak často se má úloha ozývat, a když se neozve včas, spustí poplach. Výhodou je, že zachytíte všechny důvody selhání najednou: chybu ve skriptu, plný disk, vypnutý server i cron, který se po aktualizaci systému nespustil.

Příklad pro cron

Záloha databáze každou noc ve 2:00. Adresu zavoláme jen tehdy, když záloha skončí bez chyby, proto &&:

0 2 * * * /opt/zaloha/db.sh && curl -fsS -m 10 --retry 3 https://hb.night-shift.cz/vas-token > /dev/null

Parametr -f zajistí, že curl při chybě serveru skončí neúspěchem, -m 10 omezí čekání na 10 sekund a --retry 3 zkusí požadavek znovu, když síť zrovna zakolísá.

Příklad pro systemd timer

U služby spouštěné časovačem systemd přidejte volání do ExecStartPost, které se spustí jen po úspěšném dokončení hlavního příkazu:

[Service]
Type=oneshot
ExecStart=/opt/zaloha/db.sh
ExecStartPost=/usr/bin/curl -fsS -m 10 --retry 3 https://hb.night-shift.cz/vas-token

Uvnitř aplikace

U importů a front, které běží v aplikaci, zavolejte adresu přímo z kódu po úspěšném dokončení. V PHP stačí:

file_get_contents('https://hb.night-shift.cz/vas-token');

Ve WordPressu se WP-Cron spouští jen při návštěvě webu. Pro spolehlivé úlohy ho vypněte (DISABLE_WP_CRON) a spouštějte ze systémového cronu, ideálně i s heartbeatem.

Jak nastavit toleranci

Úloha nikdy neběží přesně stejně dlouho. U pravidelných úloh nastavte toleranci podle běžné délky běhu, u záloh spíš časové okno, ve kterém mají doběhnout. Příliš přísné nastavení vede k planým poplachům a ty vedou k tomu, že upozornění přestanete číst.

Další návody