Crontab - Dacă în prezent aveți un site web greu de server, este posibil să căutați să rulați anumite procese, cum ar fi îmbogățirea datelor sau generarea de miniaturi în fundal, fără a interfera cu interfața cu utilizatorul. Ei bine, Linux crontab are un program bun care face exact asta: Cron.

O introducere în Cron

Deci, ce este acest program? Cron este clasificat ca un demon care poate executa comenzi programate. Se pornește automat la intrarea nivelurilor de rulare cu mai mulți utilizatori, de la /etc/init.d. Acesta caută în fișierul spool la / var / spool / cron / crontabs fișierele crontab numite după conturile din / etc / passwd. Pentru a accesa crontabs în acest director, trebuie să utilizați comanda crontab în loc să le accesați direct. Cron poate citi și formatul ușor diferit de / etc / crontab, precum și fișierele din /etc/cron.d.

După ce a fost configurat, Cron se trezește în fiecare minut, examinează codurile de linux stocate și verifică comanda pentru a vedea dacă trebuie executat ceva. Dacă o comandă este executată și ieșirea este generată, ieșirea este apoi trimisă proprietarului crontab sau utilizatorului din variabila MAILTO din crontab. Copiile copiilor ale cron care execută aceste procese sunt numite cu majuscule, pe care le veți vedea în ieșirea ps și syslog.

Cron verifică, de asemenea, în fiecare minut dacă există modificări în timpul de modificare al directorului spool. Dacă există schimbări, atunci examinează modul de modificare a tuturor crontabs linux și le reîncarcă pe cele care s-au schimbat. Drept urmare, cron nu trebuie să repornească atunci când un fișier crontab este schimbat.

Atunci când ceasul este schimbat cu trei ore sau mai puțin, există considerente speciale ca la începutul și la sfârșitul timpului de vară. Dacă timpul avansează, lucrările care au rulat în timpul omis vor fi modificate pentru a rula curând după modificare. Pe celălalt capăt, dacă timpul se întoarce înapoi, lucrările care se încadrează în timpul repetat nu vor fi reluate.

Sunt afectate doar joburile care se execută la o anumită oră, mai degrabă decât cele pe oră sau cele marcate cu „*” în minutul / ora specificatorului. Locurile de muncă specificate cu mașinile sălbatice se execută imediat pe baza noii ore. În cazul schimbărilor de ceas mai mari de trei ore, noul timp este utilizat imediat.

În Red Hat și Debian, cron tratează fișierele cron.d ca extensii ale fișierului linux crontab, deoarece urmează formatul special al fișierului, ceea ce înseamnă că includ câmpul utilizator. Această caracteristică își propune să permită pachetele care necesită un control mai fin al planificării decât directoarele zilnice, lunare sau săptămânale. Astfel de fișiere ar trebui să fie numite în mod ideal după pachetele furnizorilor lor. Fișierele trebuie să se conformeze convenției de denumire utilizate pentru piesele de rulare, prin faptul că acestea trebuie să constea exclusiv din litere mari, minuscule, cifre, cratime și linii mici. Fișierele din directorul cron.d sunt monitorizate pentru modificări, la fel ca directorul linux crontab. Pentru comenzi precum / bin / ls, asigurați-vă că utilizați nume de cale absolute pentru a apela comanda corectă.

O introducere în Linux Crontab

Acum, că cunoașteți aspectele și cronologia cron, să ne uităm atent la linux crontab, care este un program pentru instalarea, dezinstalarea sau listarea tabelelor pentru a conduce demonul în sine. Fiecare utilizator poate avea un crontab linux al său, iar fișierele sunt disponibile în directorul crontabs, dar nu sunt destinate editării directe.

Orice comandă dată într-un crontab linux al unui utilizator va fi executată pe măsură ce utilizatorul care o deține. Tabele, spațiile conducătoare și liniile goale sunt de obicei ignorate. Liniile care au un semn hash ca prim caracter non-spațial sunt ignorate, deoarece sunt tratate ca comentarii. Este demn de remarcat faptul că comentariile nu sunt permise în aceleași linii de comenzi cron, deoarece acestea vor fi citite ca parte a comenzii. La o notă similară, comentariile nu sunt permise și pe linii cu setări variabile de mediu.

Într-o linie crontab, o linie activă cu setarea de comandă cron sau variabilă de mediu, care este sub forma „nume = valoare”, unde spațiile pot fi adăugate, dacă este necesar, în jurul semnului egal-pentru. Orice spații ulterioare non-lider fac parte din valoarea numelui. Șirul valoric ar putea fi plasat în ghilimele de potrivire unice sau duble pentru păstrarea spațiului liber sau de frânare. Nu este analizată pentru înlocuirile de mediu, astfel încât s-ar putea să constatați că linii precum „PATH = $ HOME / bin: $ PATH” nu vor funcționa așa cum era de așteptat.

Multe setări de mediu sunt setate automat de cron, cum ar fi HOME și LOGNAME fiind setate de pe linia paswd a utilizatorului și SHELL fiind setate pe / bin / sh și PATH fiind setat pe / usr / bin: / bin. Puteți înlocui PATH, SHELL și HOME prin setările crontab. Cu toate acestea, LOGNAME nu poate fi modificat, deoarece este utilizatorul de la care se execută lucrarea. În sistemele BSD, această variabilă poate fi numită USER, caz în care USER va fi setat și.

Dacă trimiterea de e-mailuri face parte din comenzile care sunt rulate în linia crontab, cron se va uita, de asemenea, la MAILTO. Dacă variabila este definită și nu este goală, un mail este trimis utilizatorului numit. Dar dacă este goală, nu se trimite niciun e-mail și este trimis un mail proprietarului linux crontab. Dacă fișierul cron.allow este disponibil, atunci trebuie să fiți listat în el pentru a utiliza această comandă. Dacă acest fișier nu există, dar există un fișier cron.deny, atunci ar trebui să fii eliminat din acel fișier pentru a utiliza comanda. Dacă niciun fișier nu există, numai super-utilizator va putea utiliza comanda în funcție de parametrii dependenți de site. În mod alternativ, toți utilizatorii vor putea utiliza comanda, care este cazul sistemelor standard Debian.

Dacă opțiunea –u este disponibilă, aceasta dă numele de utilizator a cărui linie crontab necesită reglare. Dacă nu este dat, atunci crontab examinează crontab-ul utilizatorului care execută comanda. Este important să folosiți această opțiune întotdeauna de dragul siguranței atunci când circulați în interiorul lui, deoarece linux crontab poate fi confundat cu su. Opțiunea -l este disponibilă pentru crontab-ul curent care va fi afișat pe ieșirea standard, în timp ce opțiunea -r elimină crontab-ul curent. Comanda -e este utilizată pentru editarea actuală linie crontab folosind editori specificate de variabilele de mediu EDITOR sau VISUAL. Nu puteți utiliza niciun editor care să se deconecteze și să recreeze fișierul; aveți nevoie de un editor care să editeze fișierul în loc. După ieșirea din editor, linia crustab modificată va fi instalată automat.

Modulul pam_env este de asemenea suportat de cron pe sistemul Debian GNU / Linux, încărcând mediul în conformitate cu fișierul modulului. Cu toate acestea, trebuie remarcat faptul că setarea PAM nu înlocuiește setările menționate mai sus sau setările fișierului crontab. Dacă doriți o PATH diferită de locația coșului, trebuie să o configurați în fișierul crontab. În mod implicit, Cron va trimite e-mailuri folosind tipul de conținut „text / simplu” cu parametrul set de caractere setat pe setul de coduri / harta de caractere a locației locale în care cronul a fost pornit, care este configurația implicită a sistemului local fără nicio variabilă de mediu setată sau localizarea pe care au configurat-o variabilele. Puteți adăuga propriile codări de caractere pentru ieșirea prin poștă, setând variabilele „Content_Transfer_Encoding” și „Content_Type” în codurile încrucișate pentru a se potrivi cu anteturile de poștă ale numelor.

Cursuri recomandate

  • Curs online de tehnici R Studio Anova
  • Training de certificare în AngularJS
  • Curs de certificare ISTQB nivel 1
  • Pregătirea certificării în bazele de testare software

Lucrând la Crontab

Comanda crontab, găsită în sistemele de operare Unix-like și Unix, poate fi accesată printr-un terminal. Pentru a vedea ce crontab rulează în prezent, deschideți un terminal pe sistemul dvs. și executați următoarea comandă:

$ sudo crontab -l

Pentru a edita listele de joburi crontab, puteți utiliza următoarea comandă:

$ sudo crontab -e

Această comandă deschide editorul implicit din sistemul dvs., care ar putea fi pico sau vio, pentru a schimba crontab. Pentru a salva lucrarea crontab în fișierul dvs. crontab, salvați și ieșiți din editor. Joburile Crontab sau cronjobs pot fi scrise astfel:

* * * * * /bin/execute/this/script.sh

Există cinci asteriscuri în comanda de mai sus, fiecare reprezentând părți de date diferite pentru a planifica lucrarea. Aici sunt ei:

  1. Minut, cuprins între zero și 59
  2. Ore, de la zero la 23
  3. Ziua lunii, de la una la 31
  4. Luna, de la una la 12
  5. Ziua săptămânii, de la zero până la șase, cu semnificație zero duminică

Lista de mai sus a fost dată în ordine, așa că trebuie să definiți primul minut, apoi urmați ora, ziua lunii, luna și ziua săptămânii. Puteți păstra asteriscul dacă nu doriți să definiți niciunul dintre câmpuri, dar este important să rețineți că simbolul înseamnă „fiecare”. Dacă lăsați intacte toate cele cinci câmpuri cu asteriscurile, înseamnă fiecare minut din fiecare oră, în fiecare zi a fiecărei săptămâni și în fiecare lună.

Acum, să presupunem că doriți doar să executați un script în fiecare prânz într-o duminică, iată ce faceți:

0 12 * * 0 /bin/execute/this/script.sh

Acum, scriptul este executat atunci când ceasul sistemului atinge 1200 de ore în fiecare duminică, în fiecare săptămână a fiecărei luni. Acum, dacă doriți să executați scriptul în fiecare zi lucrătoare la 12 noiembrie, iată ce scrieți:

0 12 * * 1-5 /bin/execute/this/script.sh

Cronul execută comenzi atunci când câmpurile an, lună, oră și minut se potrivesc cu ora curentă sau când cel puțin ziua lunii și anul se potrivesc cu ora curentă. Un câmp poate fi marcat cu un asterisc pentru a indica „primul-ultim”. Intervalele de numere sunt permise, intervalele fiind două numere care sunt separate printr-o cratime. Intervalul specific este inclus, astfel încât un interval de 8-11 pentru „ore” specifică execuția la a opta, a noua, a zecea și a unsprezecea oră. Listele sunt de asemenea acceptate, fiecare număr fiind separat cu virgule, cum ar fi „1, 2, 8, 9”. Puteți combina și potrivi, astfel încât ar putea fi „1, 2, 8-11”.

Puteți utiliza valorile de pas împreună cu intervalele, cu „/” după un interval care specifică o săritură a valorii numărului prin interval. De exemplu, „0-11 / 2” în câmpul ore specifică executarea comenzii la fiecare altă oră, care ar fi scrisă ca o listă ca atare: „0, 2, 4, 6, 8, 10”. Pașii pot fi permisiți după un asterisc, cum ar fi „* / 2” pentru a indica o comandă care trebuie executată la fiecare două ore. Pentru câmpurile de zi și lună, puteți utiliza primele trei litere din acea zi sau lună anume, iar cazul nu contează. Cu toate acestea, listele și intervalele de nume nu sunt acceptate. Ziua de execuție poate fi specificată în două câmpuri: ziua săptămânii și ziua lunii. Dacă ambele câmpuri sunt restricționate, comanda va rula atunci când se potrivește oricare dintre câmpuri.

Restul liniei este câmpul „al șaselea”, care specifică comanda care trebuie rulată. Porțiunea de comandă a liniei duce până la o linie nouă sau până la% caracter. Este executat de sh sau de coaja specificată în variabila SHELL a fișierului crontab. % Din comandă va fi modificat în caractere de linie nouă, cu excepția cazului în care sunt evadate cu retrospectiva '\'. Toate datele după primul semn% sunt trimise ca intrare standard la comandă. Nu puteți împărți o linie de comandă în mai multe linii.

Planificarea trucurilor pe Crontab

Formatarea poate fi obișnuită, dar iată câteva trucuri care vă pot ajuta. Dacă doriți să rulați un cronjob la fiecare zece minute, îl puteți scrie astfel:

0, 10, 20, 30, 40, 50 * * * * /bin/execute/this/script.sh

Sau puteți să o scrieți în acest fel, care este mai ușor:

* / 10 * * * * /bin/execute/this/script.sh

De asemenea, aveți cuvinte speciale pe care le puteți adăuga pentru câmpul din primul minut în loc de un număr, ca atare:

  • @reboot: acest lucru ar rula scriptul o dată la pornirea sistemului
  • @ aniversar: pentru a rula comanda o dată pe an (formatul alternativ va fi „0 0 1 1 *”)
  • @annual: o alternativă la cuvântul cheie anual
  • @ lunar: pentru a rula comanda o dată pe lună („0 0 1 * *”)
  • @ săptămânal: pentru a rula o dată pe săptămână („0 0 * * 0”)
  • @daily: pentru a rula o dată pe săptămână („0 0 * * *”)
  • @midnight: o alternativă la cuvântul cheie zilnic
  • @ oră: pentru a rula în fiecare oră („0 * * * *”)

Depozitare de ieșire

În mod implicit, cron salvează ieșirea lucrării la căsuța poștală a utilizatorului sau la root. Dar puteți face ieșirea mai simplă și mai prezentabilă salvând-o într-un fișier jurnal separat. Așa o faceți:

* / 10 * * * * /bin/execute/this/script.sh >> /var/log/script_output.log 2> & 1

Linux este capabil să raporteze pe diverse niveluri. Aveți erori standard STDERR și ieșire standard STDOUT, marcate ca 2 și, respectiv, 1. Următoarea declarație indică stocarea ambelor STDERR și STDOUT, pentru a crea un singur flux de date de mesaje și erori:

2> & 1

Deci am definit fluxul de ieșire, acum trebuie să îi oferim o destinație. „>” Suprascrie fișierul și „>>” se anexează la acesta. Pentru anexare, care este întotdeauna mai sigur, puteți utiliza următoarea comandă:

>> /var/log/script_output.log

Concluzie

După cum vedeți, cron vă permite să setați activități pentru a rula automat la intervale regulate în fundal. Aceasta permite crearea automată a copiilor de rezervă, programarea actualizărilor, sincronizarea fișierelor și multe altele. Puteți face toate astea și multe altele cu crontab.

Articole recomandate: -

Iată câteva articole care vă vor ajuta să obțineți mai multe detalii despre Crontab Linux, așa că treceți doar prin link.

  1. Întrebări și răspunsuri la interviu Linux | Utile și cele mai solicitate
  2. Cariere în Linux
  3. Top 10 aplicații Linux utile pentru administratorii de sistem
  4. Linux vs Windows 10