Pouze pro návštěvníky našeho blogu Získejte další 3 měsíce zdarma + 10% slevu na tříletý plán YSBLOG10
Chyťte dohodu

Jak nastavit úlohy Cron na Linuxovém serveru – snadný průvodce

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?

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-run

Použ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.sh

Už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, monthly běžet přes run-parts

Proměnné prostředí v Cronu

  • PATHNastavte bezpečnou, explicitní cestu.
  • SHELLVýchozí nastavení je /bin/shnastaveno na /bin/bash pokud 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=UTC

Krok 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 -e

Vyberte editor při prvním spuštění. V případě potřeby jej explicitně nastavte:

export EDITOR=vim
crontab -e

3) 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.service

4) 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 crond

5) 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 cron or journalctl -u crond
grep CRON /var/log/syslog
tail -f /var/log/cron
journalctl -u cron -f

Pří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>&1

Systé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>&1

Cron 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/uploads

Sprá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 -r

Doč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>&1

Jednorá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 -f or journalctl -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 PATH explicitně; 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/bash pokud 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 cron or systemctl status crond
  • Povolit při spuštění: systemctl enable cron or systemctl 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 flock nebo 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.
  • 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 obvykle cronie.
  • 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 s crontab -la monitorovat protokoly.
  • Používejte explicitní cesty, proměnné prostředí a flock aby 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.

Sdílet přes:

Prahlad Prajapati

Prahlad je specialista na webhosting a expert na organický růst zaměřený na SEO z Indie. V digitálním prostoru působí od roku 2019 a pomáhá lidem rozvíjet jejich webové stránky pomocí čistých a udržitelných strategií. Je nadšený pro učení a rychlou adaptaci a věří, že malé detaily vedou k velkému úspěchu. Objevte jeho poznatky o webhostingu a SEO, které vám pomohou vylepšit vaši online prezentaci.

Zanechat komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

Přejděte na začátek