crontab

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În Unix si Unix- ului de cron operare sisteme , The cron comanda permite programarea de comenzi , adică, le permite acestora să fie înregistrate cu sistemul care urmează să fie trimise apoi la executare periodic în mod automat de către sistem în sine. Același nume „crontab” se referă și la fișierele utilizate de comanda crontab ca „jurnale” ale comenzilor programate.

În general, crontab folosește un daemon , numit crond , care ca atare rulează constant în fundal și, o dată pe minut, citește conținutul jurnalului de comandă programat și le execută pe cele pentru care perioada de așteptare a expirat. O comandă executată de crontab se numește cronjob .

Fișierele crontab

Fișierele crontab conțin lista de joburi și alte instrucțiuni pentru demonul cron. Utilizatorii pot avea fișiere crontab individuale și adesea există fișiere crontab la nivelul întregului sistem (de obicei în /etc sau într-un subdirector al /etc ) care pot fi utilizate doar, dar editate de administratorii de sistem .

Fiecare linie a unui fișier crontab urmează un anumit format, format dintr-o serie de câmpuri separate prin spații sau file . Câmpurile pot avea o singură valoare sau o serie de valori.

Operatori

Există mai multe moduri de a specifica mai multe valori într-un câmp:

  • Operatorul de virgulă , specifică o listă de valori, de exemplu: 1,3,4,7,8 .
  • Cratima - Operatorul specifică o serie de valori, de exemplu: 1-6 , care este egal cu 1,2,3,4,5,6 .
  • Operatorul asterisc * specifică toate valorile posibile ale unui câmp. De exemplu, un asterisc în câmpul orar este echivalent cu „fiecare oră”.

Există, de asemenea, un operator acceptat de unele versiuni extinse ale cron , operatorul slash / , care poate fi folosit pentru a sări peste o serie de valori. De exemplu, */3 în câmpul de timp este egal cu 0,3,6,9,12,15,18,21 ; operatorul * specifică „la fiecare oră”, dar /3 indică faptul că sunt folosite doar prima, a patra, a șaptea și așa mai departe din valorile returnate de * .

Câmpuri

Primele cinci câmpuri de pe fiecare linie specifică cât de des și când se execută o comandă.

 # .---------------- [m] inute: minute (0 - 59) 
# | .------------- [h] our: time (0 - 23)
# | | .---------- [d] a lunii: ziua lunii (1 - 31)
# | | | .------- [lun] a: lună (1 - 12) SAU ianuarie, februarie, mar, apr ... 
# | | | | .---- [w] eek day: ziua săptămânii (0 - 6) (duminică = 0 sau 7)
# | | | | | SAU soare, luni, marți, miercuri, joi, vineri, sâmbătă 
# | | | | |
# * * * * * comanda de executat

Notă:

  1. Pentru „ziua săptămânii” (câmpul 5), atât 0, cât și 7 sunt considerate valoarea duminicii.
  2. Dacă atât „ziua lunii” (câmpul 3), cât și „ziua săptămânii” (câmpul 5) sunt prezente pe aceeași linie, comanda este executată atunci când cel puțin unul dintre cele două este adevărat. Vezi exemplul de mai jos.

Al șaselea câmp și următoarele (adică restul liniei) specifică comanda de executat.

Exemple

Crontab pentru administrarea utilizatorilor pe un sistem AIX

 # ================================================= = ===============
# GENERAREA RAPOARTELOR DE ACTIVITATE A SISTEMULUI
# Între 8 și 17 un raport la fiecare 20 de minute în timpul săptămânii.
# Un raport la fiecare oră sâmbăta și duminica.
# Între orele 18:00 și 07:00 un raport în fiecare oră în timpul săptămânii.
# Generează un rezumat la 18:05 în fiecare săptămână.
# ================================================= = ===============

0,20,40 8-17 * * 1-5 / usr / lib / sa / sa1 1200 3 &
0 * * * 0.6 / usr / lib / sa / sa1 &
0 18-7 * * 1-5 / usr / lib / sa / sa1 &
5 18 * * 1-5 / usr / lib / sa / sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaq

Erori recurente

 # Pregătirea pentru schimbarea orei de vară / iarnă
59 1 1-7 4 0 /root/shift_my_times.sh

La prima vedere ați putea crede că această linie de configurare pregătește lansarea scriptului shift_my_times.sh la shift_my_times.sh în prima duminică din aprilie. Totuși, acest lucru este incorect.

Spre deosebire de alte domenii, a treia și a cincea zi sunt evaluate cu o operație OR în cazul în care există valori numerice explicite în a treia - în timp ce printr - o operație în cazul în care există numai * , / și , operatori. În consecință, scenariul va rula la 01:59 în fiecare zi de la 1 aprilie până la 7 aprilie și, în plus, în fiecare duminică din aprilie.

Codul corect ar fi:

 # Pregătirea pentru schimbarea orei de vară / iarnă
59 1 1-7 4/12? /root/shift_my_times.sh

O altă greșeală obișnuită este să inserați % caractere în comanda de executat: acestea trebuie să fie evadate , deoarece % din caracter denotă o nouă linie.

 #Eroare
1 2 3 4 5 atingere ~ / error_`date "+% Y% m% d" `.txt

#Corect
1 2 3 4 5 atingeți ~ / corect_`date + \% Y \% m \% d`.txt

În acest exemplu, caracterul % denotă începutul STDIN pentru comanda cat:

 * * * * * cat -% a trecut un minut

O altă greșeală este să nu înfășurați după ultima linie („returnare la trăsură”). În acest caz, ultima linie nu este luată în considerare.

Valori nestandardizate

Mulți dezvoltatori tind să programeze operațiuni pe timp de noapte, moment în care sistemele sunt evident mai puțin utilizate. Cu toate acestea, ca oameni, aceștia nu distribuie operațiuni în mod egal în timpul disponibil, așa că multe operații încep în același timp, făcând exploatarea sistemului mai puțin eficientă. De fapt, avem adesea tendința de a folosi timpi „rotunzi” (minut 0: 23:00, miezul nopții etc.), jumătate de oră (minut: 30) sau generalizatori, multipli de un sfert de oră sau 10 minute; rareori te gândești să începi o operație la 04:08. Pentru a depăși acest lucru, implementarea cron a sistemului Jenkins vă permite să utilizați simbolul special „H” care vă permite să delegați decizia valorii numerice către mașină, pentru a distribui mai bine operațiunile în timp. De asemenea, puteți specifica un interval, de exemplu:

 # HH (1-4) * * * comandă de executat 

cântă în fiecare zi la orice minut între orele patru și patru. Timpul nu este recalculat la fiecare execuție: timpul pentru prima execuție este ales automat, fiecare reexecutare va avea loc întotdeauna în același timp [ fără sursă ] .

Dezactivați e-mailul de notificare

Dacă comenzile rulate de crontab produc ieșire, demonul cron trimite de obicei un e-mail utilizatorului său care conține ieșirea respectivă.

  • Pentru a reduce la tăcere executarea unei anumite comenzi, puteți redirecționa ieșirea acesteia către /dev/null . Pentru a evita primirea mesajelor de la cron, adăugați următorul text la toate comenzile. Aceasta va redirecționa ieșirea standard către /dev/null și eroarea standard către ieșirea standard , suprimând orice mesaj de ieșire (inclusiv mesajele de eroare):
 > / dev / null 2> & 1
  • Dacă utilizați cron Vixie , puteți bloca trimiterea de e-mailuri de notificare pentru toate joburile unui utilizator adăugând următoarea linie în crontab respectiv:
 MAILTO = ""

Elemente conexe

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT