Chcete-li nastavit úlohy cron na serveru Linux, vyberte správného uživatele a otevřete jeho crontab pomocí crontab -e, přidejte plán (minuta hodina den měsíc den v týdnu) a příkaz s úplnou cestou, uložte a poté ověřte pomocí crontab -lZkontrolujte protokoly (/var/log/cron or /var/log/syslog) a používat absolutní cesty, proměnné prostředí a flock aby se zabránilo překrývání.
Pokud se učíte, jak nastavit cron úlohy v prostředí Linuxových serverů, tato příručka vám poskytne praktický návod, který vám pomůže s kopírováním a vkládáním. Jakožto dlouholetý administrátor serverů a seniorní technický SEO... spisovatel obsahu at YouStable, ukážu vám správnou syntaxi, reálné příklady, tipy pro řešení problémů a osvědčené postupy, které skutečně fungují v produkčních systémech.
Co je Cron a proč ho používat?

Cron je vestavěný plánovač úloh v Linuxu. Spouští démona na pozadí (cron/crond), který spouští příkazy podle pevného plánu – zálohy, rotaci protokolů, automatizaci skriptů a další. Upravíte „crontab“ (tabulku cron), abyste definovali, kdy a co se má spustit.
Cron vs. systemd Časovače vs. Anacron
- Cron: Přesné plány na minutu. Skvělé pro servery, které jsou neustále online.
- Časovače systemd: Moderní alternativa s kontrolou závislostí, zpožděním při bootování a lepším protokolováním přes
journalctl. - Anacron: Zajišťuje běh denních/týdenních/měsíčních úloh, i když byl počítač vypnutý (běžné na noteboocích/serverech Ubuntu pro
/etc/cron.daily).
Jak funguje Cron
Démon cron čte uživatelské crontaby a systémové cron soubory, kontroluje plány každou minutu a provádí příslušné příkazy v minimálním prostředí. V Debianu/Ubuntu je tato služba cronna RHEL/CentOS/Alma/Rocky je to crond.
Základy a syntaxe cronu
Časová pole Crontab
Řádek crontabu uživatele má pět časových polí následovaných příkazem:
# ┌─ minute (0–59)
# │ ┌─ hour (0–23)
# │ │ ┌─ day of month (1–31)
# │ │ │ ┌─ month (1–12 or JAN–DEC)
# │ │ │ │ ┌─ day of week (0–7 or SUN–SAT; 0/7=Sunday)
# │ │ │ │ │
# * * * * * command-to-runPoužijte rozsahy (např. 1-5), seznamy (1,15,30) a kroky (*/5 pro každých 5 jednotek). V systémových souborech jako /etc/crontab a /etc/cron.d/*, před příkazem se zobrazí šesté pole (uživatel).
Speciální řetězce
@reboot /path/to/script.sh
@hourly /path/to/script.sh
@daily /path/to/script.sh
@weekly /path/to/script.sh
@monthly /path/to/script.sh
@yearly /path/to/script.sh
@annually /path/to/script.shUživatelské vs. systémové crontaby
- Uživatelský crontab:
crontab -e(žádné uživatelské pole; spuštěno jako tento uživatel) - Systémový crontab:
/etc/crontab(obsahuje uživatelské pole) - Vkládací soubory:
/etc/cron.d/(jedna úloha na řádek, včetně uživatele) - Periodické diry:
/etc/cron.daily,weekly,monthlyběžet přesrun-parts
Proměnné prostředí v Cronu
PATHNastavte bezpečnou, explicitní cestu.SHELLVýchozí nastavení je/bin/shnastaveno na/bin/bashpokud potřebujete funkce Bashu.MAILTOOdeslat výstup na e-mail; prázdné pro potlačení.CRON_TZV mnoha distribucích nastavuje časové pásmo pomocí crontabu.
# Example header in crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@example.com
# CRON_TZ=UTCKrok za krokem: Nastavení úloh Cron na Linuxovém serveru
1) Vyberte si správný účet
Spouštět úlohy pod nejméně privilegovaným uživatelem, který má stále přístup k souborům a potřebné příkazy. Použijte root pouze v případě potřeby (např. zálohy systému, úlohy balíčků).
2) Otevřete Crontab
# Edit the crontab for the current user
crontab -e
# For another user (requires sudo)
sudo crontab -u www-data -eVyberte editor při prvním spuštění. V případě potřeby jej explicitně nastavte:
export EDITOR=vim
crontab -e3) Přidat úlohu
Přidejte řádek s plánem a příkazem s plnou cestou. Přesměrujte stdout/stderr do logu, abyste mohli ladit.
# Every 5 minutes
*/5 * * * * /usr/bin/php /var/www/app/artisan schedule:run >> /var/log/app-cron.log 2>&1
# Run a backup at 02:30 daily
30 2 * * * /usr/bin/rsync -a --delete /data/ /backups/data/ >> /var/log/backup.log 2>&1
# At reboot, start a worker (with a small delay)
@reboot /bin/sleep 20 && /usr/bin/systemctl --user start queue-worker.service4) Uložit a ověřit
# List current crontab
crontab -l
# Validate cron service is running
# Debian/Ubuntu
systemctl status cron
# RHEL/CentOS/Alma/Rocky
systemctl status crond5) Záznamy testů a kontrol
# Quick test: write timestamp every minute
* * * * * /usr/bin/date >> /tmp/cron-test.txt 2>&1- Protokoly Debianu/Ubuntu:
/var/log/syslog(hledat CRON) - Rodinné protokoly RHEL:
/var/log/cron - systemd žurnál:
journalctl -u cronorjournalctl -u crond
grep CRON /var/log/syslog
tail -f /var/log/cron
journalctl -u cron -fPříklady cronu z reálného světa, které můžete kopírovat
Vyhněte se překrývání s hejnem
# Every 10 minutes, run job if not already running
*/10 * * * * /usr/bin/flock -n /tmp/report.lock /usr/local/bin/generate_report.sh >> /var/log/report.log 2>&1Systémový Cron s konkrétním uživatelem
Použijte /etc/cron.d/ explicitně zadat uživatelské pole.
# /etc/cron.d/db-backup
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# minute hour dom mon dow user command
15 3 * * * postgres /usr/bin/pg_dump -Fc mydb | /usr/bin/gzip -c > /backups/mydb-$(date +\%F).dump.gz 2>&1Cron s run-parts (denní skripty)
Vložit spustitelné skripty do /etc/cron.daily/Jména se musí shodovat run-parts pravidla (bez teček).
# /etc/cron.daily/rotate-uploads (chmod +x)
/usr/sbin/tmpreaper 14d /var/www/uploadsSpráva, zobrazení seznamu, zakázání a odebrání úloh Cron
Seznam a odebrání
crontab -l # list
crontab -r # remove current user's crontab
sudo crontab -u user -l
sudo crontab -u user -rDočasné zakázání úlohy
Zakomentujte to a přidejte kontext pro budoucí vy:
# PAUSED 2025-02-01: heavy load during migration
# */2 * * * * /usr/local/bin/indexer.sh >> /var/log/indexer.log 2>&1Jednorázové časově omezené úkoly
Pro jednorázové použití použijte at nebo systemd-run –on-active úlohy místo cronu:
echo "/usr/local/bin/once.sh" | at 02:00
systemd-run --on-active=5m /usr/local/bin/cache-warm.shŘešení problémů s úlohami Cron
Zkontrolujte protokoly a výstup příkazů
- Přesměrování výstupu do souboru:
>> /var/log/myjob.log 2>&1 - Podívejte se na servisní deník:
journalctl -u cron -forjournalctl -u crond -f - Ujistěte se, že se načte soubor úlohy (správný název souboru v části
/etc/cron.d, bez teček)
Oprava rozdílů v prostředí
- sada
PATHexplicitně; cron má minimální prostředí. - Použijte úplné cesty k binárním souborům (
/usr/bin/python3,/usr/bin/php). - V případě potřeby nainstalujte zdrojové kódy virtualenv nebo profily uvnitř skriptů.
- Použijte
SHELL=/bin/bashpokud se spoléháte na funkce Bashu.
Oprávnění a Povolit/Zakázat
/etc/cron.allowUživatelé na bílé listině, kteří mají povoleno používat cron./etc/cron.denyUživatelé na černé listině.- Zajistěte spustitelné a čitelné skripty; správné vlastnictví cílových souborů/adresářů.
Cron neběží?
- Stav služby:
systemctl status cronorsystemctl status crond - Povolit při spuštění:
systemctl enable cronorsystemctl enable crond - SELinux/AppArmor může blokovat akce – zkontrolujte protokoly auditu.
Zabezpečení a osvědčené postupy
- Používejte absolutní cesty všude.
- Proměnné a cesty uvádějte v uvozovkách; vyhněte se chybám způsobujícím dělení slov.
- Nejmenší oprávnění: pokud možno spouštět pod uživatelem bez oprávnění root.
- Zabraňte překrývání s
flocknebo PID soubory. - Zaznamenávejte výstupy a rotujte protokoly. Integrujte je s monitorováním.
- Tajné informace uchovávejte v souborech prostředí nebo v úložišti, ne v kódu.
- Zabalte složité příkazy do skriptů s kontrolou verzí.
- Ověřujte zálohy pomocí testovacích obnov; plánujte kontroly integrity.
Cron na populárních distribucích (rychlé poznámky)
- Debian/Ubuntu: Služba je
cronpřihlašuje se/var/log/syslog./etc/cron.dailyčasto poháněno Anacronem na serverech. - RHEL/CentOS/Alma/Rocky: Služba je
crondpřihlašuje se/var/log/cronBalíček je obvyklecronie. - SUSE/OpenSUSE: Podobné jako RHEL; ověřte pomocí
systemctl status cron. - Kontejnery: Uvažujme jednoho supervizora (např.
supervisord) nebo externí plánovače; cron uvnitř kontejnerů je možný, ale při navrhování je třeba postupovat opatrně.
Key Takeaways
- Upravit pomocí
crontab -e, ověřte scrontab -la monitorovat protokoly. - Používejte explicitní cesty, proměnné prostředí a
flockaby se zabránilo překrývání. - Vyberte správný mechanismus: cron, časovače systemd nebo Anacron.
- Zvyšte zabezpečení s minimálními oprávněními a auditovanými skripty.
- Pro klid duše zvažte YouStableJe managed servery pro nastavení a sledování kritických plánů.
Často kladené otázky: Cron úlohy na Linuxovém serveru
Jaká je správná syntaxe cronu pro každých 5 minut?
Použijte */5 * * * * následovaný vaším příkazem. Příklad: */5 * * * * /usr/bin/php /var/www/app/artisan schedule:run >> /var/log/app-cron.log 2>&1.
Proč můj skript funguje v shellu, ale ne v cronu?
Cron má minimální prostředí. Nastavte PATH, použijte plné binární cesty, zadejte SHELL=/bin/bash, pokud používáte funkce Bash, zdrojové kódy venvs a přesměrovat výstup do protokolu pro zachycení chyb.
Kde najdu cron logy v Linuxu?
V Debianu/Ubuntu zkontrolujte /var/log/syslog pro položky CRON. V systémech RHEL/CentOS/Alma/Rocky zkontrolujte /var/log/cronTaké zkontrolujte journalctl -u cron or journalctl -u crond.
Jak nastavím jiné časové pásmo pro úlohu cron?
Mnoho distribucí podporuje CRON_TZ podle crontabu. Příklad: CRON_TZ=UTC na prvním řádku. Jinak nastavte časové pásmo systému nebo zpracujte časová pásma uvnitř skriptu.
Jak mohu spustit úlohu cron jako root nebo jiný uživatel?
Použijte sudo crontab -e upravit crontab uživatele root. Nebo vytvořte soubor v /etc/cron.d/ a uveďte pole s uživatelským jménem. Ujistěte se, že /etc/cron.allow/deny povolit danému uživateli.