Cuprins
Ce este cron?
Cron este numele programului care permite utilizatorilor Linux / Unix să execute automat comenzi sau scripturi (grupuri de comenzi) la o anumită oră sau dată. Este utilizat în mod normal pentru comenzi administrative, cum ar fi copiile de rezervă, dar poate fi folosit pentru a rula orice. Așa cum este definit în paginile cron man; este un daemon care execută programe programate.
În practic toate distribuțiile Linux, versiunea Vixie Cron este utilizată de către persoana care a dezvoltat-o, care este Paul Vixie, unul dintre marii guru ai Unix, creator, printre alte sisteme, al BIND care este unul dintre serverele DNS cele mai populare in lume.
Porniți cron
Cron este un daemon (serviciu), ceea ce înseamnă că trebuie pornit doar o dată, de obicei cu același boot de sistem. Serviciul cron se numește crond. În majoritatea distribuțiilor, serviciul este instalat automat și este pornit de la boot-ul sistemului, acesta poate fi verificat în mai multe moduri:
1) etc / rc.d / init.d / crond status 2) /etc/init.d/crond status crond (pid 507) rulează …În cazul în care aveți comanda de service instalată:
statutul crond de serviciu
crond (pid 507) rulează …poate fi revizuit și prin comanda ps:
ps -ef | grep cronddacă din anumite motive, cron nu funcționează, putem începe cu:
/etc/rc.d/init.d/crond start Crond de pornire: [OK][color = rgb (0,0,0)] Dacă serviciul nu a fost configurat să înceapă de la început, ar fi suficient să îl adăugați cu comanda chkconfig: [/ color]
chkconfig - nivel 35 crond onCu aceasta l-ați adăuga pentru a rula nivelul 3 și 5, astfel încât să înceapă la momentul pornirii sistemului.
Folosind cron
Există cel puțin două moduri diferite de a utiliza cron:
Primul este în directorul / etc, unde cel mai probabil veți găsi următoarele directoare:
- cron.horar
- cron.zilnic
- cron.saptamanal
- cron.monthly
Pentru ca scriptul să fie executat trebuie să fie ceva similar cu următorul:
#! / bin / sh #script care generează un backup cd / usr / documents tar czf * backup cp backup / other_directory /Trebuie să reparăm că prima linie începe cu #!, Ceea ce indică faptul că este un script bash shell, celelalte linii sunt comenzile pe care dorim să le execute scriptul. Acest script ar putea fi numit, de exemplu, backup.sh și trebuie, de asemenea, să schimbăm permisiunile corespunzătoare, astfel încât să poată fi executat, de exemplu:
chmod 700 backup.sh ls -l backup.sh -rwx ------ 1 rădăcină rădăcină 0 20 iulie 09:30 backup.sh„X” din grupul de permisiuni al proprietarului (-rwx) indică faptul că poate fi executat.
Dacă lăsăm acest script în cron.hourly, atunci acesta va fi executat la fiecare oră cu un minut în fiecare zi, mai târziu voi explica de ce.
A doua modalitate de a rula sau utiliza cron este prin manipularea directă a fișierului / etc / crontab. La instalarea implicită a diferitelor distribuții Linux, acest fișier va arăta ca următoarele:
cat / etc / crontab SHELL = / bin / bash PATH = / sbin: / bin: / usr / sbin: / usr / bin MAILTO = root HOME = / # run-parts 01 * * * * root run-parts / etc / cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthlyPrimele patru linii sunt variabile care indică următoarele:
COAJĂEste „shell” sub care rulează cronul. Dacă nu este specificat, cel indicat în linia / etc / passwd corespunzător utilizatorului care execută cron va fi luat în mod implicit.
CALEConține sau indică calea către directoarele în care cron va căuta comanda de executat. Această cale este diferită de calea globală a sistemului sau a utilizatorului.
E-MAIL CĂTRECui îi este trimisă ieșirea comenzii (dacă are o ieșire). Cron va trimite un e-mail oricui este specificat în această variabilă, adică trebuie să fie un utilizator valid al sistemului sau al altui sistem. Dacă nu este specificat, atunci cron va trimite e-mailul către utilizatorul care deține comanda executată.
ACASĂEste rădăcina sau directorul principal al comenzii cron, dacă nu este indicat atunci, rădăcina va fi cea indicată în fișierul / etc / passwd corespunzător utilizatorului care execută cron.
comentariile sunt indicate cu # la începutul liniei.
După cele de mai sus vin liniile care execută sarcinile programate corespunzător. Nu există limite pentru cât de multe sarcini pot fi, una pe fiecare linie. Câmpuri (Sunt 7) care formează aceste linii se formează după cum urmează:
Minute Hour DayOfMonth Month DayOf Week Comandă utilizator
- Camp: Descriere
- Minut: Controlează minutul orei în care va fi executată comanda, această valoare trebuie să fie între 0 și 59.
- Timp: Controlează ora la care va fi executată comanda, este specificată într-un format de 24 de ore, valorile trebuie să fie cuprinse între 0 și 23, 0 este miezul nopții.
- Ziua lunii: Ziua lunii în care doriți să executați comanda. De exemplu, 20 ar fi indicat, pentru a executa comanda pe 20 a lunii.
- Lună: Luna în care comanda va fi executată, poate fi indicată numeric (1-12), sau cu numele lunii în engleză, doar primele trei litere.
- Ziua săptămânii: Ziua din săptămână va fi executată comanda, poate fi numerică (0-7) sau după numele zilei în engleză, doar primele trei litere. (0 și 7 = duminică)
- Utilizator: Utilizator care execută comanda.
- Comanda: Comandă, script sau program pe care doriți să îl rulați. Acest câmp poate conține mai multe cuvinte și spații.
Pentru a înțelege mai bine acest lucru din primele 5 câmpuri și asterisc, voi folosi mai bine câteva exemple:
Exemplu:
Descriere 01 * * * * Se execută la 1 minut din fiecare oră din fiecare zi 158 * * * La 8:15 a.m. în fiecare zi 15 20 * * * La 20:15 din fiecare zi 00 5 * * 0 La 5 a.m. în fiecare duminică * 5 * * Soare În fiecare minut de la 5:00 a.m. la 5:59 a.m. în fiecare duminică 45 19 1 * * La 19:45 1 din fiecare lună 01 * 20 7 * La 1 minut din fiecare oră pe 20 iulie 10 1 * 12 1 La 1:10 a.m. În fiecare luni din decembrie 00 12 16 * Miercuri la prânz pe data de 16 a fiecărei luni și adică miercuri 30 9 20 7 4 La 9:30 a.m. din 20 iulie și adică joi 30 9 20 7 * La 9:30 a.m. de la 20 iulie indiferent de ziua săptămânii 20 * * * 6 Până la 20 de minute din fiecare oră sâmbăta 20 * * 1 6 Până la 20 de minute din fiecare oră sâmbăta din ianuarieDe asemenea, este posibil să specificați liste în câmpuri. Listele pot fi sub forma 1,2,3,4 sau sub forma 1-4, care ar fi la fel. Cron, în același mod, acceptă creșteri în liste, care sunt indicate după cum urmează:
Valoare sau listă / incrementareDin nou, listele și incrementele sunt mai ușor de înțeles cu exemple:
Exemplu:
Descriere 59 11 * 1-3 1,2,3,4,5 La 11:59 a.m. Luni până vineri, ianuarie până la 45 martie * 10-25 * 6-7 La 45 de minute din toate orele de la 10 la 25 din toate lunile și că ziua este sâmbătă sau duminică 10,30,50 * * * 1,3,5 La 10, 30 și 50 de minute din toate orele, luni, miercuri și vineri * / 15 10-14 * * * La fiecare cincisprezece minute de la 10:00 la ora 14:00 * 12 1-10 / 2 2,8 * Toate minutele de la ora 12, în zilele 1,3,5,7 și 9 februarie și august. (Creșterea în cel de-al treilea câmp este 2 și începe de la 1) 0 * / 5 1-10,15,20-23 * 3 La fiecare 5 ore din zilele 1-10, ziua 15 și din zilele 20-23 ale fiecărei luni și că ziua este miercuri 3/3 2/4 2 2 2 La fiecare 3 minute începând cu minutul 3 (3,6,9 etc.) din ore 2,6,10 etc. (la fiecare 4 ore începând cu ora 2) pe 2 februarie și adică marțiAșa cum se poate vedea în ultimul exemplu, sarcina cron care a fost atribuită acelui rând cu acele date, ar fi executată numai dacă cele 5 câmpuri (ȘI) sunt îndeplinite. Adică, pentru ca sarcina să fie executată, aceasta trebuie să fie marți, 2 februarie la 02:03. Este întotdeauna un Boolean ȘI care returnează adevărat numai dacă toate cele 5 câmpuri sunt adevărate în minutul specific.
[color = rgb (0,0,0)] Cazul anterior arată clar că: [/ color]
Programul cron este invocat în fiecare minut și execută sarcinile pe care câmpurile sale sunt îndeplinite în acel minut precis.
Inclusiv câmpul utilizatorului și comanda, liniile crontab ar putea fi după cum urmează:
0 22 * * * root / usr / daily backup.sh 0 23 * * 5 root / usr / backup săptămânal.sh 0 8.20 * * * jcarrillo mail -s "sistem care rulează" [email protected]Primele două linii sunt executate de utilizatorul root și prima execută la 22:00 în fiecare zi scriptul care generează o copie de rezervă zilnică. Cel de-al doilea execută la ora 23:00 în fiecare vineri un script care generează o copie de rezervă săptămânală. A treia linie este executată de utilizatorul sergio și ar fi executată la 8 dimineața și 8 noaptea din fiecare zi și comanda este să trimiteți un e-mail la contul [email protected] cu subiectul „sistemul funcționează”, o modalitate prin care un administrator să știe că un sistem la distanță este activ la orele specificate, dar dacă nu primește un e-mail în acele momente, ceva nu este în regulă.
Fiind rădăcină, este posibil atunci, modificați direct crontab:
vim / etc / crontabAceasta este modificată direct.
Rularea Cron cu mai mulți utilizatori, comandă crontab
Linux este un sistem multi-utilizator iar cron este una dintre aplicațiile care acceptă lucrul cu mai mulți utilizatori în același timp. Fiecare utilizator poate avea propriul fișier crontab, de fapt / etc / crontab este presupus a fi fișierul crontab al utilizatorului rădăcină, deși nu există nicio problemă că sunt incluși alți utilizatori și, prin urmare, al șaselea câmp care indică cu precizie cine este utilizatorul. care execută sarcina și este necesară în:
/ etc / crontab
Dar când utilizatorii normali (și chiar rădăcină) doriți să generați propriul fișier crontab, atunci vom folosi fișierul comanda crontab.
În directorul / var / spool / cron (poate varia în funcție de distribuție), este generat un fișier cron pentru fiecare utilizator, deși acest fișier este text, nu trebuie editat direct.
Există apoi două situații, generând direct fișierul crontab cu comanda:
crontab -eCu care editorul implicit se va deschide (în general vi) cu fișierul numit crontab gol și unde utilizatorul va intra în tabelul său de sarcini și va fi salvat automat ca / var / spool / cron / user.
Celălalt caz este că utilizatorul editează un fișier text normal cu intrările sarcinilor și, ca exemplu, îl numește „my_cron”, apoi comanda $> crontab my_cron va fi însărcinată cu stabilirea acestuia ca fișier cron al utilizatorului în / var / spool / cron / user:
vi my_cron # șterge fișiere din folderul partajat 0 20 * * * rm -f / home / sergio / shared / * # execută un script care efectuează o copie de rezervă a folderului de documente în prima zi a fiecărei luni 0 22 1 * * / home / sergio / suport lunar.sh # la fiecare 5 ore de luni până vineri, se asigură că permisiunile sunt corecte în casa mea 1 * 5 * * * 1-5 chmod -R 640 / home / sergio / *: wq ( fișier)> ls my_cron> crontab my_cron (setat la / var / spool / cron / user)Rezumând cele de mai sus și luând în considerare alte opțiuni pentru crontab:
crontab file.cron (va seta fișierul.cron ca crontab al utilizatorului) crontab -e (va deschide editorul prestabilit unde fișierul crontab poate fi creat sau editat) crontab -l (listează crontab-ul curent al utilizatorului, joburile cron) crontab -r (elimină crontabul curent al utilizatorului)La unele distribuții, atunci când editați crontabs-uri obișnuite de utilizator, este necesar să reporniți serviciul, astfel încât fișierele crontab din / var / spool / cron să poată fi recitite.
service crond repornițiPentru a înțelege mai bine cum să porniți / opriți / reporniți serviciile, în acest articol veți găsi mai multe informații.
Controlul accesului la cron
Cron vă permite să controlați ce utilizatori pot sau nu să utilizeze serviciile cron. Acest lucru se realizează într-un mod foarte simplu prin următoarele fișiere:
- /etc/cron.allow
- /etc/cron.deny
echo ALL >> / etc / cron.deny sau pentru a adăuga un alt utilizator la cron.allow echo juan >> / etc / cron.allowDacă nici fișierul cron.allow și nici fișierul cron.deny nu există, teoretic utilizarea cronului este atunci fără restricții de utilizator. Adăugarea de nume de utilizator în cron.allow, fără a crea un fișier cron.deny, va avea același efect ca și crearea acestuia cu cuvântul ALL. Aceasta înseamnă că odată ce cron.allow a fost creat cu un singur utilizator, ceilalți utilizatori care doresc să utilizeze cron vor trebui întotdeauna să fie specificați în acest fișier.
ConcluziiAm vorbit despre funcționarea sa, sper că ați înțeles, unele distribuții precum Red Hat includ o variantă precum anacron care poate suplini unele deficiențe cron, chiar și așa, la orice nivel, de la cel mai de bază la cel mai avansat, se utilizează cron , este recomandabil să înțelegeți funcționarea acestuia. Dacă găsiți întrebări sau aveți o sugestie, nu ezitați să o puneți în comentarii.V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv