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 opravit úlohy Cron na Linux Serveru 2026: Snadný průvodce

Oprava úloh cron na serveru Linux, ověřte, zda je spuštěná služba cron, zkontrolujte protokoly, zda neobsahují chyby, a otestujte ji pomocí jednoduché úlohy. Poté opravte cesty, oprávnění a proměnné prostředí. (CESTA, MUŠLE, DOMOV)a pravidla načasování.

Nakonec ověřte crontaby uživatelů, skripty a bezpečnostní kontexty a znovu spusťte testy, abyste potvrdili naplánované spuštění. Pokud se vaše naplánované úlohy neběží, tato příručka přesně ukazuje, jak opravit cron úlohy na linuxovém serveru.

Projdeme si diagnostiku, protokoly, opravy prostředí, oprávnění a specifické zvláštnosti distribucí. Jako specialista na hosting ve společnosti YouStableVyřešil jsem tisíce problémů s cronem. Použijte tento kontrolní seznam, aby vaše úlohy fungovaly spolehlivě.


Rychlý kontrolní seznam pro diagnostiku nefunkčních úloh Cron

  • Je služba cron spuštěná a povolená při bootování?
  • Ukazují protokoly, že úloha běží, nebo selhává?
  • Funguje minimální testovací úloha?
  • Používají se pro každý příkaz a skript úplné cesty?
  • Jsou oprávnění k souborům, vlastnictví a další parametry správné?
  • Jsou proměnné prostředí (CESTA, MUŠLE, DOMOV) soubor?
  • Je rozvrh správný, časové pásmo přesné a systémové hodiny synchronizované?
  • Je úloha pod správným uživatelem a povolena příkazem cron.allow/deny?
  • Máte nějaké problémy s pojmenováním SELinux/AppArmor nebo částí běhu?

Jak funguje Cron (a proč selhává)?

Cron spouští příkazy podle plánů definovaných v uživatelských crontabech a systémových souborech. Používá minimální prostředí, které často narušuje skripty, které běží bez problémů v interaktivních shellech.

Oprava úloh Cron v Linuxu

Většina problémů souvisí s chybějící cestou PATH, nesprávným uživatelem, nesprávnými cestami k souborům, oprávněními nebo neběžící službou.

Ověření, zda je spuštěný Cron Daemon

Různé distribuce používají různé názvy služeb. Zkontrolujte stav a povolte je při spuštění:

# Debian/Ubuntu
sudo systemctl status cron
sudo systemctl enable --now cron

# RHEL/CentOS/Alma/Rocky/Amazon Linux
sudo systemctl status crond
sudo systemctl enable --now crond

Zkontrolujte logy cronu, zda neobsahují chyby

Záznamy vám řeknou, zda cron se pokusil spustit vaši úlohu a co se stalo potom.

# Systemd journal
sudo journalctl -u cron    # Debian/Ubuntu
sudo journalctl -u crond   # RHEL/CentOS family

# Traditional logs
sudo tail -f /var/log/cron           # Often on RHEL/CentOS
sudo tail -f /var/log/syslog         # Often on Debian/Ubuntu

Pokud se v očekávaném čase neobjeví žádný záznam v protokolu, úloha není správně naplánována nebo se nachází v crontabu nesprávného uživatele.

Vytvořte minimální testovací úlohu

Testování izoluje cron od složitosti vašeho skriptu. Přidejte minutový test:

crontab -e   # under the user that should run the job
* * * * * /usr/bin/env bash -lc 'echo "CRON OK $(date)" >> /tmp/cron_test.log 2>&1'

Počkejte dvě minuty. Pokud se soubor /tmp/cron_test.log aktualizuje, cron funguje. Problém je pravděpodobně ve vašem skriptu nebo prostředí.

Běžné důvody selhání úloh Cron

  • Chybí CESTA: Příkazy jako php, python nebo composer nebyly nalezeny.
  • Špatný uživatel: Úloha přidána do crontabu uživatele root, ale měla by běžet jako www-data nebo jiný uživatel.
  • Relativní cesty: Skript očekává pracovní adresář, který cron nenastaví.
  • Oprávnění: Skript není spustitelný, má nesprávného vlastníka nebo je blokován programem SELinux/AppArmor.
  • Špatné konce řádků typu shebang nebo CRLF: Skript se nespustí v Linuxovém shellu.
  • pojmenování součástí spuštění: Soubory v /etc/cron.daily potřebují v Debianu/Ubuntu názvy bez teček.
  • Chyby v plánování: špatně seřazená pole nebo použití @reboot bez povolení služby.
  • Posun časového pásma/hodin: systémové vypnutí; úloha se zdá být „přeskočena“.

Oprava prostředí: CESTA, SHELL, HOME a úplné cesty

Cron používá minimální prostředí. V horní části crontabu explicitně nastavte, co potřebujete, a pro každý binární soubor a skript použijte úplné cesty.

# At the top of your crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""        # or set to your email to receive job output
HOME=/home/youruser

# Example job
0 2 * * * /usr/bin/php /var/www/html/artisan schedule:run >> /var/log/laravel-cron.log 2>&1

Vždy objevujte binární umístění pomocí kterého:

which php
which python3
which composer
which wp

Oprava oprávnění, vlastnictví a dalších problémů

  • Spustitelný bit: chmod +x /cesta/k/script.sh
  • Správný vlastník: chown correctuser:correctgroup /cesta/k/script.sh
  • Šebang: Ujistěte se, že první řádek ukazuje na existující shell nebo interpret (např. #!/bin/bash nebo #!/usr/bin/env python3)
  • Poslední nový řádek: Ujistěte se, že crontab končí znakem nového řádku; některé verze cronu jinak poslední řádek ignorují.
  • Oprava zakončení řádků ve Windows: dos2unix /cesta/k/script.sh
sudo chmod +x /path/to/script.sh
sudo chown www-data:www-data /path/to/script.sh
head -n1 /path/to/script.sh   # verify shebang
dos2unix /path/to/script.sh   # if edited on Windows

Ověřte správného uživatele a Crontab

Pokud webová aplikace potřebuje běžet jako www-data (Apache/Nginx uživatele), vytvořte nebo upravte crontab daného uživatele, nikoli roota. Systémový /etc/crontab umožňuje specifikovat uživatele pro každou úlohu.

# User crontab
sudo -u www-data crontab -e

# System crontab (format includes a user field)
# m h dom mon dow user command
* * * * * www-data /usr/bin/php /var/www/html/artisan schedule:run

Řízení přístupu může omezit použití cronu.

Zaškrtněte políčka pro povolení/zakázání souborů:

cat /etc/cron.allow   # if present, user must be listed here
cat /etc/cron.deny    # user must NOT be listed here

Používejte robustní ladění: protokoly, e-mail a trasování

  • Přesměrujte stdout/stderr do souboru protokolu pro zachycení chyb.
  • Povolte e-mailová oznámení přes MAILTO pro rychlý přehled.
  • Použijte logger pro zápis do syslogu ze skriptů.
  • Trasování skriptů pomocí set -x pro shell nebo -v pro PHP CLI pro zobrazení spuštěných funkcí.
# Crontab example
MAILTO=admin@example.com
*/5 * * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# Inside /usr/local/bin/backup.sh
#!/bin/bash
set -euo pipefail
set -x
logger -t backup "Backup started"
# ...backup logic...
logger -t backup "Backup finished"

Specifické zvláštnosti distribuce: /etc/cron.* a run-parts

  • Debian/Ubuntu používá run-parts pro /etc/cron.daily, weekly atd. Soubory musí být spustitelné a mít názvy bez teček (např. backup_db, nikoli backup.db).
  • RHEL/CentOS také podporuje /etc/cron.daily, ale může se lišit v umístění protokolů a názvu služby (crond).
  • Soubory /etc/cron.d/ vyžadují uživatelské pole a musí mít správná oprávnění (obvykle 600) a žádnou příponu, kterou run-parts odmítá.
# Example /etc/cron.d/backup (permissions 600)
# m h dom mon dow user command
15 3 * * * root /usr/local/bin/backup.sh

Časování, časové pásmo a synchronizace hodin

  • Ověřte časové pásmo a NTP, abyste se vyhnuli „zmeškaným“ běhům během změn letního času.
  • Používejte @reboot pouze tehdy, když je služba cron povolena a server se restartuje.
  • Pro notebooky nebo servery, které nejsou neustále zapnuté, použijte anacron k zachycení zmeškaných úloh.
timedatectl
sudo timedatectl set-timezone <Your/Timezone>
systemctl status systemd-timesyncd  # or chronyd/ntpd

SELinux/AppArmor a bezpečnostní kontexty

Bezpečnostní rámce mohou blokovat cron pracovní místa tiše. V systémech SELinux zkontrolujte odmítnutí a nastavte správné kontexty namísto zakázání SELinuxu.

# Check audit log for denials
sudo ausearch -m avc -ts recent
sudo cat /var/log/audit/audit.log | grep cron -i

# Adjust context (example)
sudo chcon -t bin_t /usr/local/bin/backup.sh
# Or create a policy module if needed (preferred for persistence)

Vyhněte se úskalím cronu: Znaménka procent, cesty a souběžnost

  • V příkazech crontab se % v příkazech definuje jako \% (cron v příkazu % bere jako nový řádek).
  • Používejte absolutní cesty k souborům a příkazům. Nespoléhejte se na cd.
  • Zabraňte překrývání výběhů pomocí hedvábného materiálu.
# Prevent overlapping runs
*/10 * * * * /usr/bin/flock -n /var/lock/report.lock /usr/local/bin/report.sh

Časovače Systemd vs. Cron: Kdy přepnout

V moderních distribucích nabízejí časovače systemd lepší logování, kontrolu závislostí a přesnost. Zvažte nahrazení složitých nastavení cronu s časovači pro spolehlivost.

# Example systemd timer
# /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily at 03:15

[Timer]
OnCalendar=*-*-* 03:15:00
Persistent=true

[Install]
WantedBy=timers.target

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
sudo systemctl status backup.timer

Nejlepší bezpečnostní postupy pro úlohy Cron

  • Nejmenší privilegium: Spouštět úlohy jako minimální potřebný uživatel, nikoli jako root.
  • Chraňte skripty a protokoly přísnými oprávněními (600–700).
  • Ošetřete vstupy; vyhněte se parsování nedůvěryhodných dat v cron skriptech.
  • Skripty pro správu verzí a nasazení přes CI/CD, aby se zabránilo serverům typu „sněhová vločka“.
  • Střídat protokoly a monitor prostřednictvím centralizovaného protokolování.

Jak opravit úlohy Cron na Linuxovém serveru: Krok za krokem

  • Zkontrolujte službu: Ujistěte se, že je cron/crond aktivní a povolený.
  • Protokoly kontrol: journalctl a /var/log/cron nebo syslog pro záznamy úloh a chyby.
  • Přidejte minimální testovací úlohu, která ověří, zda se cron vůbec spustí.
  • Nastavené prostředí: definujte SHELL, PATH, HOME a MAILTO v horní části crontabu.
  • Použijte absolutní cesty: ke každému příkazu, interpretu a souboru.
  • Opravte oprávnění a další funkce; odstraňte CRLF pomocí dos2unix; zajistěte spustitelný bit.
  • Potvrďte správného uživateleVložte úlohu do crontabu správného uživatele nebo zadejte uživatele v /etc/crontab nebo /etc/cron.d/.
  • Účet pro specifika distribuce: pravidla pojmenování částí run-parts a oprávnění k souborům.
  • Zabezpečení rukojeti: Zkontrolujte odmítnutí SELinuxu/AppArmoru; použijte správné kontexty/zásady.
  • Zabraňte překrývání s hejnem; přidejte protokolování a e-mail; znovu otestujte a monitorujte.

Nejčastější dotazy

Proč se moje cron úloha spouští ručně, ale ne z cronu?

Cron běží s minimálním prostředím a jiným pracovním adresářem. Používejte plné cesty, nastavte PATH a SHELL v crontabu a vyhněte se relativním cestám. Přesměrujte výstup do protokolu pro zachycení chyb a ověření, že uživatel spouštějící úlohu je správný.

Kde jsou v Linuxu cron logy?

V Debianu/Ubuntu zkontrolujte journalctl -u cron a /var/log/syslog. V RHEL/CentOS zkontrolujte journalctl -u crond a /var/log/cron. Některé minimální obrazy se logují pouze do deníku, proto použijte journalctl odpovídajícím způsobem.

Jak nastavím proměnné prostředí pro úlohy cron?

Přidejte je na začátek crontabu (např. SHELL, PATH, HOME, MAILTO) nebo si z konfiguračního souboru vyhledejte zdroj uvnitř skriptu. Nespoléhejte se na .bashrc nebo .profile, nemusí se spustit pod cronem, pokud je explicitně neuvedete jako zdroj.

Jaký je správný formát pro soubory /etc/cron.d?

Vyžadují za plánem pole uživatele. Oprávnění by měla být restriktivní (často 600) s novým řádkem na konci. Pokud se používá run-parts, ujistěte se, že název souboru splňuje pravidla pro pojmenování (v Debianu/Ubuntu žádné tečky).

Mám nahradit cron časovači systemd?

Pro složité úlohy vyžadující závislosti, robustní protokolování a perzistenci po výpadku jsou časovače systemd vhodnější. Pro jednoduché periodické úlohy je cron v pořádku. Mnoho produkčních týmů kombinuje oba nástroje na základě případu použití.

Dodržováním tohoto návodu můžete s jistotou opravit úlohy cron na linuxovém serveru a udržet automatizaci spolehlivou. Potřebujete praktickou pomoc nebo... manageJe hosting postavený pro provozuschopnost? YouStableNaši experti jsou připraveni zavést osvědčené postupy a monitorovat vaše projekty 24 hodin denně, 7 dní v týdnu.

Sdílet přes:

Sanjeet Chauhan

Sanjeet Chauhan je bloger a SEO expert, který se věnuje pomoci webovým stránkám s organickým růstem. Sdílí praktické strategie, užitečné tipy a poznatky pro zvýšení návštěvnosti, zlepšení pozic ve vyhledávání a maximalizaci online přítomnosti.

Zanechat komentář

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

Přejděte na začátek