Crontab szintaxis és ütemezett feladatok Linuxon

Linux 3 perc olvasás

A cron job olyan ütemezett feladat, amelyet a Linux cron szolgáltatása automatikusan, meghatározott időpontokban futtat le, például egy biztonsági mentés elkészítéséhez, egy karbantartó szkript futtatásához vagy egy webalkalmazás időzített feladataihoz. A feladatok listáját crontabnak nevezik.

A crontab szerkesztése

A saját felhasználójához tartozó ütemezett feladatokat a következő paranccsal szerkesztheti:

crontab -e

A már beállított feladatok listázása:

crontab -l

root felhasználóként egy másik felhasználó crontabja is szerkeszthető: crontab -u felhasznalo -e. Vigyázzon a crontab -r paranccsal: kérdés nélkül törli az összes feladatát (az r a billentyűzeten az e mellett van). AlmaLinux 10-en a teszten a törölt crontab mentése a ~/.cache/crontab/crontab.bak fájlba került, ahonnan a crontab ~/.cache/crontab/crontab.bak paranccsal visszaállítható; más rendszereken ilyen mentés nem biztos, hogy készül. Ha cPanel tárhelyet használ, a feladatokat a felületen is felveheti, lásd: Cron job létrehozása cPanelben.

A crontab szintaxisa

Minden sor öt időmezőből és a futtatandó parancsból áll:

* * * * * parancs
│ │ │ │ │
│ │ │ │ └── hét napja (0–7, a 0 és a 7 is vasárnap)
│ │ │ └──── hónap (1–12)
│ │ └────── hónap napja (1–31)
│ └──────── óra (0–23)
└────────── perc (0–59)

A mezőkben az alábbi jelölések használhatók:

  • *: minden érték;
  • ,: felsorolás, például 1,15 (a hónap 1. és 15. napján);
  • -: tartomány, például 1-5 (hétfőtől péntekig);
  • /: lépésköz, például */15 (15 percenként).

Gyakorlati példák

  • 0 3 * * *: minden nap hajnali 3 órakor
  • */15 * * * *: 15 percenként
  • 0 0 1 * *: minden hónap első napján, éjfélkor
  • 0 9 * * 1: minden hétfőn 9 órakor
  • 30 8-18 * * 1-5: munkanapokon 8 és 18 óra között, minden óra 30. percében

Egy teljes bejegyzés:

0 3 * * * /usr/bin/php /home/felhasznalo/mentes.php >> /home/felhasznalo/mentes.log 2>&1

Ez minden nap hajnali 3-kor lefuttatja a PHP-szkriptet, és a kimenetét a hibaüzenetekkel együtt a naplófájl végére írja.

Az öt mező helyett rövidítések is használhatók: @reboot (a rendszer indulásakor), @hourly, @daily, @weekly, @monthly.

A rendszerszintű crontab

A felhasználói crontab mellett saját szerveren a /etc/crontab fájl és a /etc/cron.d/ könyvtár is tartalmaz feladatokat. Ezekben az időmezők után egy hatodik mező is szerepel: a felhasználó, akinek a nevében a parancs fut, például 0 4 * * * root /usr/local/bin/takaritas.sh.

Ha a cron job nem fut le

A leggyakoribb ok, hogy a parancs kézzel működik, cronból viszont nem. Ennek okai:

  • Elérési utak: a cron minimális környezettel fut, a PATH csak néhány könyvtárat tartalmaz (AlmaLinux 10-en a teszten /usr/bin:/bin:/usr/sbin:/sbin, tehát a /usr/local/bin és a saját ~/bin könyvtár nincs benne). Mindig a teljes útvonalat adja meg (/usr/bin/php, nem php). A pontos helyet a which php parancs mutatja meg.
  • A % jel: a crontabban a % sortörést jelent, ezért például egy date +%F parancsban \% formában kell írni. A teszten a date +%F > /tmp/kimenet.txt sorból a cron csak a date + részt futtatta (a naplóban: CMDEND (date +)), a fájl létre sem jött; date +\%F formában rendben lefutott.
  • Jogosultság: a szkriptnek futtathatónak kell lennie (chmod +x szkript.sh), lásd a fájljogosultságokról szóló cikket.
  • Időzóna: a cron a szerver időzónája szerint fut. Ellenőrizze a timedatectl paranccsal.

A futásokat a rendszernapló rögzíti: AlmaLinux és Rocky Linux alatt a /var/log/cron fájlban, Debian és Ubuntu alatt a journalctl -u cron paranccsal, illetve ha az rsyslog telepítve van, a /var/log/syslog fájlban találja. A feladat kimenetét érdemes fájlba irányítani, ahogy a fenti példa mutatja, így hiba esetén visszakereshető, mi történt.

WordPress oldalak esetén érdemes a beépített WP-Cron helyett valódi cron jobot használni, erről a WordPress cron cseréjéről szóló cikkünkben olvashat.

Vissza: Linux leírások (62)