Cron planuoklis Linux — crontab sintaksė ir pavyzdžiai

Cron išraiškų skaičiuoklė

Įveskite eilutę iš 5 laukų: minutė valanda mėnesio_diena mėnuo savaitės_diena. Aprašymas ir artimiausi paleidimai bus suskaičiuoti automatiškai.
Artimiausi paleidimai (vietinis naršyklės laikas):

    Cron — standartinis užduočių planuoklis Linux sistemoje: jis paleidžia komandas pagal tvarkaraštį (kas minutę, valandą, dieną ir t. t.). Tvarkaraštis nurodomas penkiais laukais crontab faile. Aptarsime sintaksę ir pateiksime paruoštus pavyzdžius.

    Crontab sintaksė

    Kiekvieną užduoties eilutę sudaro penki laiko laukai ir komanda:

    * * * * * komanda
    │ │ │ │ │
    │ │ │ │ └─ savaitės diena (0–7, kur 0 ir 7 — sekmadienis)
    │ │ │ └─── mėnuo (1–12)
    │ │ └───── mėnesio diena (1–31)
    │ └─────── valanda (0–23)
    └───────── minutė (0–59)
    

    Specialieji simboliai:

    • * — bet kokia reikšmė;
    • */5 — kas 5 vienetus (pavyzdžiui, kas 5 minutes);
    • 1,15 — reikšmių sąrašas;
    • 9-18 — intervalas.

    Kaip redaguoti crontab

    Atidaryti savo užduočių sąrašą redagavimui:

    crontab -e
    

    Peržiūrėti esamas užduotis:

    crontab -l
    

    Pakeitimai pritaikomi automatiškai po išsaugojimo — nieko perkrauti nereikia.

    Tvarkaraščių pavyzdžiai

    Tvarkaraštis Eilutė Kada paleidžiama
    Kas minutę * * * * * kas minutę
    Kas 5 minutes */5 * * * * 0, 5, 10…
    Kas valandą 0 * * * * valandos pradžioje
    Kasdien 3:30 30 3 * * * kartą per parą
    Darbo dienomis 9:00 0 9 * * 1-5 pr–pn
    Mėnesio 1 dieną 0 0 1 * * kas mėnesį

    Paruošti užduočių pavyzdžiai:

    # Duomenų bazės atsarginė kopija kasdien 2:30 nakties
    30 2 * * * /usr/local/bin/backup.sh
    
    # Laikinųjų failų valymas kiekvieną sekmadienį 4:00
    0 4 * * 0 find /tmp -type f -mtime +7 -delete
    
    # Svetainės patikra kas 10 minučių
    */10 * * * * curl -s https://example.com > /dev/null
    

    Specialios eilutės

    Vietoj penkių laukų galima naudoti patogius pseudonimus:

    @reboot   /path/script.sh   # paleidžiant serverį
    @daily    /path/script.sh   # kartą per parą vidurnaktį
    @hourly   /path/script.sh   # kartą per valandą
    @weekly   /path/script.sh   # kartą per savaitę
    

    Žurnalai ir derinimas

    Cron nerodo rezultato ekrane. Kad matytumėte, kas vyksta, nukreipkite išvestį į failą:

    0 2 * * * /path/backup.sh >> /var/log/backup.log 2>&1
    

    2>&1 nukreipia ir klaidas, ir įprastą išvestį į vieną žurnalą.

    Patikrinti, ar cron apskritai vykdo užduotis, galima sistemos žurnale:

    grep CRON /var/log/syslog
    

    Dažnos priežastys, kodėl užduotis neveikia

    • Santykiniai keliai. Cron veikia apribotoje aplinkoje. Nurodykite pilnus kelius iki komandų ir failų (/usr/bin/php, o ne php).
    • Aplinkos kintamieji. PATH cron aplinkoje minimalus. Nustatykite reikiamus kintamuosius crontab pradžioje arba scenarijuje.
    • Nėra vykdymo teisių. Padarykite scenarijų vykdomą: chmod +x /path/script.sh.
    • Pamiršta eilutės pabaiga. Paskutinė crontab eilutė turi baigtis eilutės perkėlimu.

    Dažni klausimai

    Kuo vartotojo crontab skiriasi nuo sisteminio? crontab -e redaguoja dabartinio vartotojo užduotis. Sisteminės užduotys yra /etc/crontab ir /etc/cron.d/, kur papildomai nurodomas vartotojas, kurio vardu vykdyti komandą.

    Kodėl užduotis veikia rankiniu būdu, bet ne per cron? Dažniausiai dėl aplinkos: cron nežino jūsų PATH ir kintamųjų. Naudokite absoliučius kelius ir aiškiai nustatykite kintamuosius scenarijuje.

    Kaip paleisti užduotį root vardu? Redaguokite root crontab komanda sudo crontab -e arba pridėkite užduotį į /etc/cron.d/ nurodydami vartotoją root.

    Ar yra cron alternatyva? Taip, systemd timers — lankstesnė ir geriau žurnalizuojama alternatyva. Tačiau cron paprastesnis ir yra praktiškai kiekviename serveryje, todėl lieka standartu.

    Apibendrinimas

    Cron padengia beveik bet kokią automatizaciją pagal tvarkaraštį: atsargines kopijas, valymą, patikras. Įvaldykite penkis sintaksės laukus, visada naudokite absoliučius kelius ir žurnalizuokite išvestį — tada užduotys vyks stabiliai.

    Reikia serverio savo užduotims ir scenarijams? Rinkitės Linux VPS, užsisakykite VPS nuomą arba Serverių administravimą.

    Laura Zariņa