crontab
Î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 cu1,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ă:
- Pentru „ziua săptămânii” (câmpul 5), atât 0, cât și 7 sunt considerate valoarea duminicii.
- 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
-
at
: Execută o comandă la un moment specificat -
launchd
: corespondentul cron pe sistemele MacOS / Apple Darwin -
anacron
linkuri externe
- Computer Hope Informații despre comanda crontab în Unix și Linux
- Specificații Opengroup - Documentația oficială UNIX 03
- Unix crontab - Referință rapidă , la adminschoice.com .
- Cron pentru Windows , la kalab.com . Adus la 22 martie 2006 (arhivat din original la 27 noiembrie 2006) .
- fcron - o versiune în ( GPL )
- Pseudo-cron Un cron în PHP
- WebBasedCron - Un serviciu cron bazat pe web
- Webcron - Un serviciu cron bazat pe web în italiană (și în alte limbi)
- WebSchedule - Un serviciu cron bazat pe web în italiană
- crontab.guru - Un editor online pentru expresii crontab
- crontab.tech - Un editor online intuitiv pentru expresia crontab