Cron — UNIX/Linux užduočių planavimas ir crontab vadovas
Cron ir crontab vadovas: išmokite planuoti automatines UNIX/Linux užduotis, cron sintaksę, pavyzdžius ir gerąsias praktikas greitam bei patikimam automatizavimui.
"Cron" yra programa (demonas), kuri UNIX tipo sistemose leidžia automatizuoti užduotis pagal laiką — paleisti komandas ar scenarijus tam tikrais laiko intervalais. Ji plačiai naudojama UNIX operacinėse sistemose ir jų šakiniuose, pavyzdžiui, "Linux", nors panašios užduočių planavimo priemonės yra ir kitose platformose.
"Cron" tinka daugeliui pasikartojančių darbų: sistemos administravimo (pvz., atsarginės kopijos, logų rotacija), periodinių HTTP užklausų ar failų atsisiuntimų iš interneto, periodinio el. pašto tikrinimo ar kitų automatizuojamų veiksmų, kuriuos reikia vykdyti tam tikru laiku ar pagal grafiką (dienomis, savaitės dienomis, mėnesio dienomis ir pan.).
Programos pavadinimas kilęs iš graikiško žodžio, reiškiančio laiką — χρόνος (chronos), todėl vadinamas cron.
Kaip veikia cron ir kas yra crontab
Cron veikia kaip foninis procesas (daemon), kuris periodiškai tikrina vieną arba kelis planavimo failus, vadinamus crontab (cron lentelė). Crontab faile nurodomos eilutės, kiekviena – viena užduotis su laiko specifikacija ir komanda, kurią reikia vykdyti.
Crontab eilutės sintaksė
Standartinė crontab eilutė turi 5 laiko laukus ir komandą:
minutė valanda diena_mėnesio mėnuo savaitės_diena komanda
Kiekvienas laukas priima skaitmenines reikšmes, žvaigždutę (*) reiškiančią „bet kurią reikšmę“, taip pat intervalus ir sąrašus:
- minutė: 0–59
- valanda: 0–23
- diena_mėnesio: 1–31
- mėnuo: 1–12 (arba angliški trumpos formos: Jan–Dec)
- savaitės_diena: 0–7 (0 arba 7 = sekmadienis; arba Sun–Sat)
Pavyzdžiai:
# Kiekvieną dieną 02:30 30 2 * * * /path/to/backup.sh # Kiekvieną pirmadienį 06:00 0 6 * * 1 /path/to/weekly-report.sh # Kas valandą 0 * * * * /usr/bin/some-task
Specialūs žymekliai
Crontab taip pat palaiko specialius trumpinius, kurie pakeičia visą laiko lauką:
- @reboot — paleidžiama po sistemos perkrovimo
- @yearly (arba @annually) — kartą per metus
- @monthly — kartą per mėnesį
- @weekly — kartą per savaitę
- @daily (arba @midnight) — kartą per dieną
- @hourly — kartą per valandą
@daily /path/to/daily-task.sh
Crontab failų tipai ir lokalizacija
- Vartotojo crontab: pasiekiamas per komandą crontab -e. Kiekvienas vartotojas gali turėti savo crontab (jeigu sistema leidžia).
- Sisteminiai crontab failai: /etc/crontab ir katalogas /etc/cron.d/. Šiuose failuose dažnai reikia nurodyti ir naudotoją, kuriam priklauso komanda (papildomas laukas prieš komandą).
- Katalogai /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly — paprastiems scenarijams, kuriuos vykdo pagal atitinkamą intervalą.
Kaip valdyti crontab
- crontab -e — redaguoti vartotojo crontab (atidaromas redaktorius, pvz., vi arba nano).
- crontab -l — išvesti esamą crontab sąrašą.
- crontab -r — ištrinti vartotojo crontab.
Aplinka, el. paštas ir nukreipimas
Cron vykdydamas užduotis naudoja ribotą aplinką. Dažnai trūksta kelių aplinkos kintamųjų (pvz., PATH), todėl geriausia nurodyti pilną kelią iki vykdomų programų arba nustatyti PATH crontab faile:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Jei užduoties išvestis neperadresuojama, cron pagal nutylėjimą siunčia ją vartotojui per el. paštą (jei veikia pašto sistema). Norint išjungti pranešimus, galima nukreipti išvestį:
0 3 * * * /path/to/script.sh >/dev/null 2>&1
Vartotojų teisės ir saugumas
- Sistemoje gali būti failai /etc/cron.allow ir /etc/cron.deny, kurie kontroliuoja, kurie vartotojai gali naudotis crontab.
- Įsitikinkite, kad scenarijai turi vykdymo teises (chmod +x) ir tinkamą shebang eilutę (pvz., #!/bin/bash).
- Nenaudokite crontab paleisti komandas kaip root, nebent būtina — geriau naudokite specifinius vartotojus ir tinkamas teises.
Logai ir trikčių šalinimas
- Crono įrašuose gali būti naudojamas syslog; logų vieta priklauso nuo sistemos: dažnai tai /var/log/cron, /var/log/syslog arba (systemd).
- Patarimai, jei komanda neveikia: patikrinkite PATH, teises, paleidimo aplinką, naudokite absoliučius kelius, išsaugokite klaidų išvestį į failą ir patikrinkite logus.
Pavyzdžiai ir praktinės pastabos
- Kas 15 minučių:
*/15 * * * * /usr/bin/do-something
- Kiekvieną pirmą mėnesio dieną 01:00:
0 1 1 * * /usr/local/bin/monthly-job
- Paleisti scenarijų po sistemos perkrovimo:
@reboot /home/user/start-on-boot.sh
Dažniausios problemos
- Scenarijus veikia rankiniu būdu, bet ne per cron — dažniausiai dėl skirtingų aplinkos kintamųjų (PATH), darbo katalogo ar teisių.
- El. paštas su klaidomis neateina — patikrinkite pašto daemoną ir MAILTO nustatymus crontab faile.
- Laiko juosta — cron naudoja sistemos laiką; jei reikia kitų laiko juostų, apsvarstykite laiko konversiją scenarijuose arba konteinerio/aplikacijos nustatymus.
Apibendrinant: cron yra paprastas, bet galingas įrankis periodiniam užduočių vykdymui UNIX tipo sistemose. Supažindinimas su crontab sintakse, aplinkos kintamaisiais ir logavimu leis patikimai automatizuoti daug kasdienių administravimo bei kitų užduočių.
Klausimai ir atsakymai
Klausimas: Kas yra kronas?
A: "Cron" yra kompiuterinė programa, naudojama užduotims planuoti tam tikrais laiko intervalais.
K: Kur naudojama "Cron"?
A: "Cron" naudojama UNIX kompiuterių operacinėse sistemose ir į UNIX panašiose operacinėse sistemose, pavyzdžiui, "Linux".
K: Kokias užduotis galima suplanuoti naudojant "Cron"?
A.: Naudojant "Cron" galima suplanuoti daugumą pasikartojančių užduočių. Jis dažnai naudojamas automatizuoti užduotims, susijusioms su kompiuterio ar kompiuterių tinklo priežiūra ar administravimu, nors jį galima naudoti ir daugeliui kitų užduočių, pavyzdžiui, failų atsisiuntimui iš interneto ir el. pašto siuntų atsisiuntimui tam tikru laiku ar tam tikromis datomis.
K: Iš kur kilęs pavadinimas Cron?
A: Kompiuterinės programos "Cron" pavadinimas kilęs iš žodžio "cron", kuris yra kilęs iš graikiško žodžio, reiškiančio laiką - χρόνος (chronos).
K: Kaip nustatomas "Cron"?
A: Cron programa nustatoma redaguojant failą, vadinamą crontab (cron lentelė). Šiame faile išvardijamos konkrečios užduotys, kurias kompiuteris turi atlikti, ir nurodoma, kada jos turi būti atliekamos.
K: Kas yra crontab?
A: Crontab - tai failas, kuriame išvardytos konkrečios užduotys, kurias kompiuteris turi vykdyti, ir kada jos turėtų būti vykdomos.
K: Kokioms pasikartojančioms užduotims galima naudoti "Cron"?
A: Daugumą pasikartojančių užduočių, susijusių su kompiuterio ar kompiuterių tinklo priežiūra ar administravimu, galima automatizuoti naudojant "Cron". Jį taip pat galima naudoti daugeliui kitų užduočių, pavyzdžiui, failų atsisiuntimui iš interneto ir el. pašto siuntų atsisiuntimui tam tikru laiku arba tam tikromis datomis.
Ieškoti