Skip to Content
🔥 Nová dokumentace BlazeHost.cz je online — prohlédnout

Cron

Cron spouští příkazy v naplánovaný čas. Používá se pro zálohy, čištění logů nebo pravidelné kontroly.

Syntaxe

┌───── minuta (0-59) │ ┌───── hodina (0-23) │ │ ┌───── den v měsíci (1-31) │ │ │ ┌───── měsíc (1-12) │ │ │ │ ┌───── den v týdnu (0-7, 0 a 7 = neděle) │ │ │ │ │ * * * * * prikaz

Příklady

VýrazKdy se spustí
0 5 * * *každý den v 5:00
*/15 * * * *každých 15 minut
0 */6 * * *každých 6 hodin
0 3 * * 0každou neděli ve 3:00
30 2 1 * *1. den v měsíci ve 2:30
@rebootpři startu systému

Úprava crontabu

Otevři svůj crontab

crontab -e

Přidej řádek

0 3 * * * /usr/local/bin/zaloha.sh >> /var/log/zaloha.log 2>&1

Ulož a ověř

crontab -l

Cron běží s minimální proměnnou PATH. Příkazy zadávej vždy absolutní cestou (/usr/bin/mysqldump, ne mysqldump). Je to nejčastější důvod, proč úloha „nic nedělá”.

Logování výstupu

Bez přesměrování cron pošle výstup e-mailem, který nikdo nečte.

# Vsechno do logu 0 3 * * * /skript.sh >> /var/log/skript.log 2>&1 # Zahod bezny vystup, chyby do logu 0 3 * * * /skript.sh > /dev/null 2>> /var/log/skript-chyby.log

2>&1 znamená „přesměruj chybový výstup tam, kam jde běžný”. Bez toho ti v logu chyby chybí.

Příklad: denní záloha databáze

/usr/local/bin/zaloha.sh
#!/bin/bash set -euo pipefail DATUM=$(date +%F) CIL="/var/backups/db-${DATUM}.sql.gz" /usr/bin/mysqldump --single-transaction -u zaloha -p"${DB_HESLO}" mojedb \ | /usr/bin/gzip > "${CIL}" # smaz zalohy starsi 14 dni /usr/bin/find /var/backups -name 'db-*.sql.gz' -mtime +14 -delete
chmod +x /usr/local/bin/zaloha.sh

Heslo nikdy nepiš přímo do crontabu. Je čitelné pro každého, kdo vidí seznam procesů. Ulož ho do ~/.my.cnf s právy 600.

Kontrola, že cron běží

# Bezi sluzba? systemctl status cron # Log spusteni grep CRON /var/log/syslog | tail -20

Časová zóna

timedatectl sudo timedatectl set-timezone Europe/Prague

Změna časové zóny ovlivní časy všech cron úloh. Zkontroluj, že se ti záloha nepřesunula do špičky.

Systemd timer jako alternativa

Pro složitější úlohy je systemd timer lepší — má logy v journalctl, umí závislosti a nezmeškané spuštění dožene.

/etc/systemd/system/zaloha.timer
[Unit] Description=Denni zaloha [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target

Timer spouští stejnojmennou .service jednotku (zaloha.timer → zaloha.service). Bez ní timer nemá co spustit:

/etc/systemd/system/zaloha.service
[Unit] Description=Denni zaloha [Service] Type=oneshot ExecStart=/usr/local/bin/zaloha.sh

Aktivace:

sudo systemctl daemon-reload sudo systemctl enable --now zaloha.timer

Stav a další spuštění ověříš přes systemctl list-timers.

Tipy

  • Otestuj skript ručně dřív, než ho dáš do cronu.
  • Nepouštěj náročné úlohy ve špičce.
  • Ověřuj, že záloha vznikla. Cron chybu spolkne mlčky.

Poznámka

U herních serverů použij Scheduler v panelu. Do systému nemáš přístup.

Související články