Cron planuoklis Linux — crontab sintaksė ir pavyzdžiai
Cron išraiškų skaičiuoklė
minutė valanda mėnesio_diena mėnuo savaitės_diena. Aprašymas ir artimiausi paleidimai bus suskaičiuoti automatiškai.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 nephp). - Aplinkos kintamieji.
PATHcron 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ą.