Scris in | VS |
---|---|
Sistem de operare | Tip Unix |
Tip |
Utilitar UNIX ( d ) Programarea sarcinilor computerului Daemon |
cron este un program care permite utilizatorilor de sisteme Unix să ruleze automat scripturi, comenzi sau software la o dată și oră predeterminate sau pe un ciclu predefinit.
Conceptul acestui program își are originea în sistemele Unix ale Berkeley și AT&T și a fost ulterior raționalizat de Paul Vixie . Ideea inițială a fost de a avea un serviciu care se trezește în fiecare minut, analizează un set de fișiere într-un anumit director și determină de acolo dacă astfel de comenzi shell trebuie executate în acel timp.
Cron este trunchierea cron tab, ea însăși trunchierea c h ron o tab le care înseamnă „tabel de planificare” (în greacă, chronos (χρόνος) înseamnă timp).
Aceasta este o caracteristică foarte utilă pentru sarcinile de administrare de sistem de rutină , dar poate fi foarte bine folosită pentru orice altceva. De exemplu, cron poate reda un fișier ogg în fiecare zi la ora șapte, cu excepția sâmbătă și duminică, pentru a se trezi la muzică.
cron este un daemon , care în jargonul computerului se referă la un program care rulează în fundal. Serviciul cron ( crond ) așteaptă astfel până când timpul specificat în fișierul de configurare (numit crontab ) efectuează apoi acțiunea corespunzătoare și revine la repaus până la următorul eveniment.
Serviciul cron este pornit de contul root pentru a se putea adapta la identitatea fiecărui utilizator. În unele Unixes, dacă este ucis (cu comanda kill), acesta este repornit automat de către sistem.
crontabeste numele programului din Unix (și Linux ) care vă permite să editați tabelele de configurare ale programului cron . Aceste tabele specifică sarcinile care trebuie executate și programul lor de execuție, eventual cu o periodicitate. Prin extensie, numim adesea cron (sau cron job în engleză) oricărei sarcini lansate periodic.
OperațiuneComanda crontabmodifică un fișier referitor la utilizator. Pentru siguranță, crontabverificați sintaxa înainte de a actualiza fișierul. Acest fișier se află în structura copacului /var , de exemplu:
Deci, pentru utilizatorul de rootpe o mașină Debian , tabelul cron va fi stocat în/var/spool/cron/crontabs/root
Majoritatea sistemelor Linux (SuSE, Debian, Red Hat ) au, de asemenea, un tabel cron centralizat în /etc/crontab.
Există, de asemenea , înregistrări /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weeklyși /etc/cron.monthlycare conțin tabelele cron de diferite părți ale sistemului ( de rotație jurnal, fișiere de actualizare ...).
Pentru stațiile de lucru care nu funcționează neapărat 24 de ore pe zi, aplicația anacron vă permite să lansați comenzi care ar fi trebuit să fie atunci când computerul era oprit.
utilizare Citind masaUrmătoarea linie de comandă afișează conținutul tabelei cron pentru utilizatorul curent:
$ crontab -lAceastă comandă nu afișează tabelul centralizat ( /etc/crontab).
Modificarea tabeluluiUrmătoarea comandă este utilizată pentru a modifica tabelul cron pentru utilizatorul curent:
$ crontab -eAceastă comandă are ca efect lansarea editorului implicit (în general vi). Editorul afișează apoi tabelul curent. La lansarea pentru prima dată crontab, tabelul este gol, posibil format din comentarii de ajutor (linii care încep cu caracterul #).
Editorul implicit este configurat folosind variabilele de mediu $EDITORsau $VISUAL. De exemplu, pentru a configura editorul vim :
$ export EDITOR=vimDe asemenea, această comandă nu vă permite să modificați tabelul centralizat ( /etc/crontab).
Înlocuirea meseicrontabpoate suprascrie tabelul curent cu unul nou. Acest nou tabel poate fi furnizat într-un fișier ca parametru:
$ crontab fichier-contenant-la-nouvelle-table.txt Ștergerea tabeluluiUrmătoarea linie de comandă șterge conținutul, fără confirmare, al tabelei cron pentru utilizatorul curent:
$ crontab -r Sintaxa tabelului EvaluareFiecare intrare din tabel (fiecare rând) corespunde unei sarcini care trebuie efectuată și trebuie să respecte această notație:
mm hh jj MMM JJJ tâchePentru fiecare valoare numerică ( mm , hh , jj , MMM , JJJ ) , notările posibile sunt:
Dacă, pe aceeași linie, sunt introduse „numărul zilei lunii” și „ziua săptămânii”, atunci cron va executa sarcina atunci când unul dintre câmpuri se potrivește. De exemplu, rândul următor indică faptul că sarcina ar trebui să fie efectuată în zilele de vineri, precum și pe data de 13 a fiecărei luni, la miezul nopții:
0 0 13 * 5 tâche Jurnal operațiuniSarcina este o comandă care trebuie executată. Dacă această sarcină scrie în ieșirea sa standard sau eroarea standard , atunci demonul crond le trimite prin e-mail utilizatorului corespunzător (cel indicat de al șaselea parametru).
Pentru a preveni transmiterea acestor informații prin e-mail, este posibilă redirecționarea acestora în fișiere. De exemplu :
mm hh jj MMM JJJ tâche > fichier-1 2> fichier-2Sau pentru a acumula ieșirile și erorile standard în același fișier numit journal.txt :
mm hh jj MMM JJJ tâche >> /mon/répertoire/journal.txt 2>&1 Comenzi rapideComenzi rapide | Descriere | Echivalent |
---|---|---|
@reboot | În timp ce porniți | Nu |
@yearly | In fiecare an | 0 0 1 1 * |
@annually | In fiecare an | 0 0 1 1 * |
@monthly | In fiecare luna | 0 0 1 * * |
@weekly | În fiecare săptămână | 0 0 * * 0 |
@daily | In fiecare zi | 0 0 * * * |
@midnight | In fiecare noapte | 0 0 * * * |
@hourly | Fiecare ora | 0 * * * * |
Fiecare dintre exemple economisește spațiu liber pe disc (comanda df ) în fișier /tmp/df.logîn momente diferite. Pentru a păstra istoricul, aceste exemple folosesc redirecționarea >>care permite adăugarea noilor date la sfârșitul fișierului (dacă acesta există deja, altfel vor fi create).
În fiecare zi la ora 23:30:
30 23 * * * df >> /tmp/df.logÎn fiecare oră, de la 5 minute:
5 * * * * df >> /tmp/df.logÎn fiecare prim al lunii la 23 h 30 :
30 23 1 * * df >> /tmp/df.logÎn fiecare luni, la 22 h 28 :
28 22 * * 1 df >> /tmp/df.logÎn fiecare vineri și toate cele 13 ale oricărei luni la 11 h 22 :
22 11 13 * 5 df >> /tmp/df.logÎn fiecare vineri 13 a oricărei luni la 11 h 22 :
22 11 13 * * [ `date '+\%w'` -eq 5 ] && df >> /tmp/df.logDe la 2 la 5 ale fiecărei luni la 10 h 12 :
12 10 2-5 * * df >> /tmp/df.logÎn fiecare zi impară a lunii la 23 h 59 :
59 23 */2 * * df >> /tmp/df.logÎn fiecare zi lucrătoare la 22:00:
0 22 * * 1-5 df >> /tmp/df.logLa fiecare 5 minute:
*/5 * * * * df >> /tmp/df.logÎn fiecare ultimă zi a lunii (backslash-ul din fața% este obligatoriu atunci când editați crontab, spre deosebire de executarea manuală a comenzii):
0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >> /tmp/df.logExemplele de mai sus folosesc redirecționarea >>pentru a crea un jurnal pe mai multe rulări.
Pentru a scrie în diferite fișiere, este posibil să utilizați comanda date, ca în exemplul următor:
30 23 * * * df > /tmp/df_`date +\%d_\%m_\%Y_\%H_\%M`.log(caracterul `(accent grav, U + 0060) este produs de combinația tastelor [ Alt Gr] + [7] de pe tastatura AZERTY din Franța)
Desigur, o altă soluție este să scrieți fișierul într-un script appelle-df.sh :
#!/bin/sh JJ_MM_ANNEE_HH_MM=`date +\%d_\%m_\%Y_\%H_\%M` df > /tmp/df_${JJ_MM_ANNEE_HH_MM}.logȘi înlocuiți tabelul cron anterior cu:
30 23 * * * appelle-df.sh Comenzi utileAceste comenzi nu funcționează pentru toate distribuțiile Linux și Unix .
Indică ora ultimei sarcini executate pentru toți utilizatorii:
ls -lut /etc/init.d/cronExtrageți informații despre tabelul cron din jurnalul de sistem:
grep -w cron /var/log/syslogRelansați demonul cron:
/etc/init.d/cron force-reloadCând se schimbă ora de iarnă / vară , ora oficială se schimbă de la 2 dimineața la 3 dimineața (conform normelor în vigoare în Franța). În sarcinile programate 14 - 12 2 59 nu va fi , prin urmare , executată. În schimb, în timpul schimbării orei de vară / iarnă , aceleași sarcini vor fi îndeplinite de două ori (la 3 dimineața, este încă 2 dimineața).
Pentru a evita acest inconvenient, majoritatea sistemelor Unix sunt configurate pentru a utiliza timpul universal coordonat (UTC), care nu este supus acestor reguli de vară.
mcron nu este o implementare adecvată a programului menționat, ci o evoluție majoră codificată în limbajul Scheme . Suportă nu numai metoda tradițională , ci și fișierele de configurare scrise în Scheme, ceea ce îi conferă o anumită flexibilitate în definirea sarcinilor care trebuie îndeplinite (ar putea, de exemplu, să ia în considerare încărcarea sistemului ). Noutatea vine din capacitatea sa de a citi toate instrucțiunile necesare, de a le procesa pe cele care trebuie executate în continuare și de a merge la culcare în timpul alocat. Când se trezește, comenzile sunt executate și se calculează timpul următorului tratament. Specificațiile pentru acest nou program sunt scrise într-un limbaj din familia Lisp , care permite procesarea simultană a mai multor instrucțiuni și o flexibilitate mai mare decât formatul de fișier Vixie . Ca să nu mai vorbim că modificările aduse fișierelor crontabs ale utilizatorilor îi sunt raportate direct de programul crontab , în timp ce cron trebuie să verifice / etc / crontab în fiecare minut, deși utilizarea acestui fișier este foarte descurajată și poate fi dezactivată. Este un software gratuit distribuit de Proiectul GNU în condițiile licenței GPL .
Unele părți ale acestui articol sau o versiune anterioară a acestui articol se bazează pe articolul Site-ul web Planificarea sarcinilor Cum funcționează . Articolul original conține următoarea notificare privind drepturile de autor: „© Copyright 2004 Jean-François Pillou - Găzduit de Web-solutions.fr. Acest document de la CommentCaMarche.net este supus licenței GNU FDL . Puteți copia, modifica copii ale acestei pagini atâta timp cât această notă apare clar. ". De atunci, acest site Cum funcționează? și-a schimbat permisul. Și, în sfârșit, articolul original nu mai este disponibil.