Să analizăm în detaliu cron, comenzile sale și diferitele operațiuni legate de acesta.
Vom învăța cum să programăm execuții automate folosind instrumentul cron și, la final, vom examina unele resurse online care ne ajută la structurarea și verificarea comenzilor cron.
Originea
Termenul crontab se traduce prin „tabel cron”. Cuvântul „cron” provine din grecescul Chronos, care înseamnă timp. Crontab este un proces de sistem, un fel de demon, care realizează automat anumite sarcini și operații la momentul stabilit.
Aplicații practice
Crontab este util pentru o varietate de operațiuni, precum automatizarea backup-urilor, rotirea fișierelor jurnal, sincronizarea datelor între servere la distanță, eliminarea folderelor temporare, printre alte sarcini de administrare a sistemului.
Folosind cron, un administrator poate programa o sarcină să ruleze la o anumită oră și zi.
Deci, haideți să vedem cum putem configura acest lucru.
Sintaxa Crontab
Pentru a rula o serie de comenzi, utilitarul cron citește fișierele de configurare. Sintaxa Crontab este folosită pentru a interpreta liniile din tabelele de configurare. Un crontab are șase câmpuri; primele cinci (1-5) specifică data și ora la care se va executa sarcina. Al șaselea câmp reprezintă numele de utilizator și/sau comanda, scriptul sau jobul care va fi executat.
* * * * * COMANDA/SCRIPT-DE-EXECUTAT NUME_UTILIZATOR
│ │ │ │ │
│ │ │ │ │
│ │ │ │ |_________ Ziua săptămânii (0 – 6) (0 este duminică sau se pot folosi nume)
│ │ │ |____________ Luna (1 – 12), * înseamnă fiecare lună
│ │ |______________ Ziua lunii (1 – 31), * înseamnă fiecare zi
│ |________________ Ora (0 – 23), * înseamnă fiecare oră
|___________________ Minut (0 – 59), * înseamnă fiecare minut
Observații:
- Asteriscul
- este folosit pentru a indica toate valorile posibile ale unui câmp. Spre exemplu, un asterisc folosit în câmpul orei ar însemna fiecare oră, iar un asterisc în câmpul lunii ar însemna fiecare lună.
Numele de utilizator este opțional (disponibil doar în fișierul crontab de sistem)
Exemple:
Să înțelegem sintaxa de mai sus cu ajutorul câtorva exemple practice:
0 5 * * * /scripts/job.sh
1. Planifică o sarcină cron să ruleze zilnic la ora 5:00 dimineața.
0 6,18 * * * /scripts/job.sh
2. Planifică o sarcină cron să ruleze de două ori pe zi, la 6:00 dimineața și 6:00 seara.
* * * * * /scripts/job.sh
3. Planifică o sarcină cron să ruleze în fiecare minut.
0 19 * * mon /scripts/job.sh
4. Planifică o sarcină cron să ruleze în fiecare luni la ora 19:00.
*/10 * * * * /scripts/job.sh
5. Planifică o sarcină cron să ruleze la fiecare 10 minute.
* * * feb,jun,oct * /script/job.sh
6. Planifică o sarcină cron să ruleze în lunile specificate.
25 7 4 3 * /home/script/backup.sh
7. Rulează scriptul shell /home/script/backup.sh pe 4 martie la ora 7:25 dimineața.
8. Planifică o sarcină cron să ruleze la fiecare 30 de secunde
- Deoarece nu avem control asupra secundelor în Crontab, putem realiza acest lucru printr-un proces în doi pași.
* * * * * /home/scripts/script.sh
- În primul rând, vom programa o sarcină care rulează în fiecare minut.
* * * * * sleep 30; /home/scripts/script.sh
Acum folosim comanda sleep pentru a întrerupe execuția timp de 30 de secunde.
Sarcina de mai sus va opri execuția timp de 30 de secunde și va continua.
Tipul fișierelor de configurare Cron
Există două tipuri de fișiere de configurare Cron:
Crontab de sistem UNIX/Linux
Acest lucru necesită privilegii de administrator, deoarece este frecvent utilizat pentru servicii de sistem și sarcini importante. Al șaselea câmp (conform descrierii sintaxei anterioare) este numele utilizatorului sub care va rula comanda. Oferă posibilitatea sistemului crontab de a executa comenzi în numele oricărui utilizator.
Crontab utilizator
Un utilizator poate crea propriile joburi cron folosind comanda crontab. Aici, al șaselea câmp (conform descrierii sintaxei de mai sus) este comanda de executat, iar toate comenzile rulează în numele utilizatorului care a creat crontab-ul. Fiecare utilizator poate avea propriul fișier crontab, iar deși acestea sunt stocate în /var/spool/cron/crontabs, nu sunt concepute pentru a fi editate direct. Trebuie să folosim comanda crontab pentru a edita sau configura propriile sarcini cron.
Cum funcționează? Serviciul cron (daemon) rulează în fundal și verifică în mod constant (în fiecare minut) fișierul /etc/crontab și directoarele /etc/cron.*/. De asemenea, analizează directorul /var/spool/cron/. Comenzile sunt executate de cron
atunci când câmpurile minute, oră și lună corespund cu ora actuală și cel puțin unul dintre câmpurile zilei (ziua lunii sau ziua săptămânii) corespunde cu ziua curentă.
Comenzi de bază
Afișarea joburilor Cron existente
crontab -l
Putem lista toate joburile Cron fără a deschide fișierul de configurare crontab folosind comanda de mai jos
[[email protected] ~]# crontab -l no crontab for tipstrick.ro [[email protected] ~]#
Dacă nu există nicio sarcină programată, va returna rezultatul următor:
[[email protected] ~]# crontab -l # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 0 */1 * * * /home/account/scripts/updateAccountStatuses.sh 0 */1 * * * /home/account/scripts/reActivateAccountStatus.sh [[email protected] ~]#
Dacă utilizatorul a adăugat deja anumite sarcini, acestea vor fi afișate în acest fel.
Tabelul Cron este specific utilizatorului, ceea ce înseamnă că trebuie să fiți autentificat cu un anumit utilizator pentru a vedea lista tabelului Cron.
Listă Cron pentru un anumit utilizator
Pentru a afișa joburile programate ale altui utilizator, folosiți opțiunea -u (Utilizator) și -l (Listă).
crontab -u nume_utilizator -l
Exemplu: crontab -u tipstrick.ro -l
Adăugarea/Modificarea intrărilor Crontab
Pentru a edita intrarea crontab, putem utiliza opțiunea -e, după cum este indicat mai jos.
crontab -e
Comanda de mai sus va deschide editorul vi unde veți specifica detaliile jobului și veți salva fișierul. După ce ați salvat, puteți verifica dacă jobul cron este configurat corect folosind comanda crontab -l.
Adăugarea/Modificarea intrărilor Crontab pentru un anumit utilizator
crontab -u alt_nume_utilizator -e
Putem edita crontab pentru alt utilizator folosind comanda de mai jos
Exemplu: crontab -u tipstrick.ro -e
Eliminarea intrării Crontab
Folosiți parametrul -r cu Crontab pentru a elimina toate sarcinile programate din crontab fără a solicita confirmare.
crontab -r
crontab -i -r
[[email protected] ~]# crontab -i -r crontab: really delete tipstrick.ro's crontab?
Dacă doriți confirmare înainte de a șterge joburile programate, folosiți opțiunea -i împreună cu -r, care va solicita confirmarea utilizatorului înainte de a șterge crontab-ul acestuia.
Șir special Crontab
În plus față de sintaxa de mai sus, putem folosi și opt șiruri speciale furnizate de Crontab. Acestea nu numai că economisesc timp, ci și îmbunătățesc lizibilitatea.
Șir special
Descriere
@reboot
Se execută o singură dată, după repornire.
@anual
Se execută o singură dată pe an, adică 0 0 1 1 *
@anual
Același lucru ca @anual
@lunar
Se execută o singură dată pe lună, adică 0 0 1 * *
@săptămânal
Se execută o singură dată pe săptămână, adică 0 0 * * 0
@zilnic
Se execută o singură dată pe zi, adică 0 0 * * *
@miezul nopții
Același lucru ca @daily
@la oră
Se execută o singură dată pe oră, adică 0 * * * *
Exemple de șiruri speciale Crontab
1. Crontab pentru planificarea sarcinilor anuale.
@anual /scripts/greeting.sh
Putem folosi linia de mai sus pentru a trimite o urare de Anul Nou. Se va executa în primul minut al fiecărui an.
2. Crontab pentru planificarea sarcinilor lunare.
@monthly /scripts/cleanup.sh
Putem folosi linia de mai sus pentru a efectua anumite activități de curățare la începutul fiecărei luni.
În mod similar, putem utiliza și alte șiruri speciale Crontab pentru sarcini săptămânale, zilnice și orare.
Directorul Cron
- Administratorul de sistem poate utiliza un program cron la nivelul întregului sistem, care se află în cadrul directorului cron predefinit, după cum se indică mai jos:
- /etc/cron.d
- /etc/cron.daily
- /etc/cron.hourly
- /etc/cron.monthly
/etc/cron.weekly
Exemple Crontab în timp real
Să analizăm câteva exemple practice, utilizate frecvent de administratori de sistem sau de specialiști IT.
Ștergerea fișierelor și directoarelor goale
45 0 * * * tipstrick.ro find /tmp -type f -empty -delete
Expresia cron de mai sus va căuta fișiere și directoare goale în directorul /tmp și le va șterge. Această operație va rula zilnic la ora 12:45. Trebuie să menționăm numele de utilizator pentru a realiza această sarcină. În exemplul de mai sus, utilizatorul tipstrick.ro efectuează operația cron.
Executarea mai multor sarcini folosind un singur cron
* * * * * /home/scripts/backup.sh; /home/scripts/scritp.sh
Mai multe sarcini sau joburi pot fi separate cu punct și virgulă (;) și pot fi atribuite unei singure expresii cron.
Instrumente de formatare și testare Cron
Până acum am analizat comenzile și sintaxa crontab pentru a programa o sarcină. Dar, dacă nu sunteți administrator de sistem și sarcina dumneavoastră nu este configurarea regulată a Cron, este posibil să nu vă amintiți sintaxa și, astfel, să existe erori. Nu vă faceți griji, avem o soluție pentru această problemă.
Există numeroase instrumente online de formatare Cron.
# 1. Cron Job Generator Generatorul de joburi Cron
este o interfață grafică extrem de ușor de utilizat, unde puteți specifica minutul, zilele și calea scriptului pentru a genera codul crontab.
Să luăm un exemplu concret, în care trebuie să rulez /home/processMonitor.sh la fiecare 5 minute, de luni până vineri.
Astfel, am obținut sintaxa Cron de mai jos, pe care o pot introduce în crontab-ul meu executând
crontab –e
0,5,10,15,20,25,30,35,40,45,50,55 * * * 1-5 /home/processMonitor.sh
# 2. Easycron Easycron
este un instrument de programare a sarcinilor cron, util și bazat pe web. Putem crea un job cron specificând o adresă URL de apelat și setând ora la care ar trebui să fie executat. De asemenea, putem defini o expresie cron sau o putem adăuga manual dintr-un formular descriptiv. Important este că, opțional, putem folosi autentificare HTTP de bază pentru un nivel redus de securitate.
Nu numai asta, dar Easycron poate fi folosit și pentru alte scopuri, precum validarea expresiilor Cron standard, vizualizarea jurnalelor de execuție a sarcinilor Cron, primirea de notificări prin e-mail, evidențierea jurnalelor de eroare etc.
# 3. Crontab Generator Generator Crontab
este un alt instrument la îndemână pentru generarea de cod crontab, și cu acest instrument puteți adăuga, dacă doriți, opțiunea de a salva rezultatul cron într-un fișier sau de a-l trimite prin e-mail.
# 4. Crontab Guru Crontab Guru
este un editor online simplu pentru expresii cron programate. În plus, oferă o modalitate utilă de monitorizare a joburilor cron. Tot ce trebuie să facem este să copiem o comandă furnizată și să o adăugăm la sfârșitul definiției crontab. Dacă sarcina cron eșuează sau nu pornește, veți primi o notificare prin e-mail.
În exemplul de mai jos, Job se va executa la 04:05, în fiecare zi, în fiecare lună și în fiecare săptămână.
# 5. Tester CRON Tester CRON
ne permite să testăm definițiile cron de timp și dată. Pot exista situații în care trebuie să decodificăm sintaxa cron existentă pentru a efectua depanarea sau doar vrem să facem un test.
Pentru a face acest lucru, putem utiliza acest instrument. Trebuie doar să copiem și să lipim expresia cron în câmpul de definiție, să selectăm numărul de iterații și să dăm click pe Test pentru a vizualiza diferitele date la care va rula sarcina.
Să analizăm una dintre expresiile noastre cron, 4 3 */2 * *, care ar trebui să ruleze la 03:04 (dimineața) la fiecare două zile. Să verificăm cu testerul cron.
.