Cron

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 14 septembrie 2016; verificările necesită 28 de modificări .

cron este un daemon  clasic ( program de calculator  pe  sisteme  de clasă  UNIX ) folosit pentru a rula joburi periodic la un moment specific. Acțiunile regulate sunt descrise de instrucțiuni plasate în fișierele crontab și directoare speciale.

Numele cron este derivat din cuvântul grecesc χρόνος (hrόnos) - timp (în engleză - chronos ). Dezvoltatorul cron , Ken Thompson , a confirmat acest lucru într -o conversație privată cu Brian Kernighan .   .

Pe sistemele bazate pe systemd , cron a fost de fapt înlocuit de mecanismul systemd.timer încorporat.

Fișierele Crontab create pentru utilizatori individuali se află în directorul [1] /usr/spool/cron/crontabs/ sau /var/spool/cron/tabs/ . Nu este recomandat să le editați manual; pentru aceasta se folosește comanda crontab -e. Fișierele crontab utilizate pentru a gestiona întregul sistem se află în directorul /etc/cron.d/ . În plus, directoarele /etc/cron.daily/ , /etc/cron.weekly/ și /etc/cron.monthly/ conțin programe care rulează automat (zilnic, săptămânal sau lunar).

Fișierul principal de configurare cron, /etc/crontab, arată cam așa:

# /etc/crontab: crontab la nivel de sistem # Spre deosebire de orice alt crontab, nu trebuie să rulați comanda `crontab' # pentru a instala noua versiune când editați acest fișier # și fișierele din /etc/cron.d. Aceste fișiere au, de asemenea, câmpuri de nume de utilizator, # lucru pe care niciunul dintre celelalte crontabs nu o fac. SHELL = /bin/sh PATH = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # mh dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #

crontab

Fiecare utilizator al sistemului are propriul fișier setat de crontab , care descrie la ce oră și ce programe să ruleze în numele acestui utilizator. Pentru a edita fișierul crontab , se folosește un program special crontab cu același nume , care vă permite să nu întrerupeți procesul cron în timpul editării.

Afișați conținutul fișierului de programare curent:

crontab -l

Ștergerea fișierului de program curent:

crontab -r

Pentru a edita fișierul crontab al utilizatorului , utilizați comanda [2]

crontab -e

Tabelul crontab este format din 6 coloane separate prin spații sau file . Primele cinci coloane stabilesc timpul de execuție ( minut , oră , zi , lună , ziua săptămânii ), ele pot conține un număr, o listă de numere separate prin virgule, un interval de numere separate printr-o cratimă, simboluri *sau /. În fișierele crontab de sistem , după câmpurile de timp, este indicat utilizatorul de la care este executată comanda. Toate celelalte caractere din șir sunt interpretate ca o comandă executabilă cu parametrii săi. Dacă comanda trimite un text la ieșirea standard, acel text este trimis la e-mailul utilizatorului .

* * * * * comanda de executat - - - - - | | | | | | | | | ----- ziua săptămânii (0-7) (duminica = 0 sau 7) | | | ------- luna (1-12) | | --------- ziua lunii (1-31) | ----------- oră (0-23) ------------- minut (0-59)

Un exemplu de fișier crontab :

# comentariile încep cu „#” ca de obicei # utilizați /bin/sh ca shell SHELL = /bin/sh # trimiteți rezultatele la această adresă MAILTO = [email protected] # adăugați directorul de acasă al utilizatorului la PATH PATH = /bin:/ usr/bin:/home/paul/bin #### Lucrările încep aici # se execută în fiecare zi la 0 ore 5 minute, adăugați rezultatul la log/daily 5 0 * * * $HOME /bin/daily.job >> $HOME /log/daily 2 > & 1 # executați 1 a fiecărei luni la 2:15 pm 15 14 1 * * $HOME /bin/monthly # în fiecare zi a săptămânii la 10:00 pm 0 22 * ​​​​* 1 -5 echo „E timpul să pleci acasă” | mail -s "Este deja 22:00" john 23 */2 * * * echo „Rulează la 0:23, 2:23, 4:23 etc.” 5 4 * * sun echo „Alerg la 4:05 am duminică” 0 0 1 1 * echo „La mulți ani!” 15 10 .13 * * 1 .4 echo "Acest mesaj este afișat luni și joi la 10:15 și 13:15" 0 -59 * * * * echo "Run every minute" 0 -59/2 * * * * echo " Se execută pe minute pare" 1 -59/2 * * * * echo "Se rulează pe minute impare" # la fiecare 5 minute */5 * * * * echo "Au trecut cinci minute" # în fiecare prima duminică a fiecărei luni. -eq 7 este codul zilei săptămânii, adică 1 -> luni , 2 -> marți etc. 0 1 1 -7 * * [ " $( data '+\%u' ) " -eq 7 ] && echo " Această etichetă este afișată în fiecare prima duminică a fiecărei luni, la ora 1:00."

Caracteristici

  • Toate condițiile (ora de începere) sunt verificate prin „ȘI logic”, cu excepția condițiilor „ziua săptămânii” și „ziua lunii” - specificate împreună, sunt procesate prin „SAU logic”, adică „pe orice a zilelor”, ceea ce se reflectă în documentație (Ubuntu, Debian, FreeBSD). Cu toate acestea, această logică nu este evidentă și nu vă permite să creați o condiție precum „prima luni a fiecărei luni” sau „în fiecare vineri pe 13”. Dezvoltatorii nu schimbă acest comportament, considerându-l ca un standard. [3]
  • Toate fișierele crontab trebuie să se încheie cu o linie goală, altfel ultima regulă sau întregul fișier va fi ignorată.
  • Comenzile din fișierul crontab folosesc sintaxa shell standard, dar nu pot fi împărțite pe mai multe linii.
  • Fișierele executabile din directoarele scanate automat, cum ar fi /etc/cron.daily/ , sunt ignorate dacă numele lor conține un punct.
  • Sintaxa crontab folosită pentru a rula la fiecare câteva minute cu un offset poate duce la rezultate neașteptate. Deci, înregistrarea 1-56/5 * * * *nu se va declanșa în primul minut al fiecărei ore; pentru a declanșa „la fiecare 5 minute începând cu primul minut al orei” utilizați formatul 1-59/5 * * * *sau 1,6,11,16,21,26,31,36,41,46,51,56 * * * *.
  • Un caracter %din comanda de rulare este folosit pentru a trece o nouă linie la comandă (dacă nu este evadată). Textul de comandă care urmează este transmis programului rulat nu ca parametri de linie de comandă, ci prin intrarea standard .
  • Ieșirea comenzilor lansate este trimisă utilizatorului în numele căruia a fost efectuată lansarea. Dacă directiva este localizată în fișierul crontabMAILTO=<new@email> înainte de comanda , atunci datele de ieșire vor fi trimise la adresa specificată.

Interfață grafică cu utilizatorul

Pentru confortul utilizatorilor, multe sisteme au programe GUI speciale pentru gestionarea cron .

Programul Gnome

Pentru distribuțiile bazate pe Debian:

  • Instalare:sudo apt-get install gnome-schedule
  • Rulați: Aplicații → Instrumente de sistem → Programare [1]

kcron

Kcron este o interfață KDE pentru editarea fișierelor de configurare cron . Utilitarul este lansat prin Alt+F2 , în fereastra de editare puteți specifica cu mouse-ul:

  • calea completă către fișierul executabil al programului
  • momentul potrivit pentru a începe programul
  • variabilele de mediu necesare în timpul executării programului

Programe similare

  • NnCron  este un programator pentru Windows .
  • Task Scheduler  - Windows Task Scheduler și utilitarul său de consolăschtasks.exe.
  • at  - rulați programe o dată la un moment dat.
  • anacron  - lansare periodică a programelor, nu neapărat exact la ora specificată: de exemplu, dacă mașina a fost oprită la ora specificată în sarcină, aceastaanacronva executa sarcina mai târziu.
  • inetd  - rulează programe de servicii de solicitare a rețelei.
  • upstart  - porniți programe de servicii pentru evenimente (o generalizare a cron, atd, anacron, inetd ).

Note

  1. Man cron Arhivat pe 28 mai 2007 la Wayback Machine .
  2. Cron Howto Arhivat pe 15 mai 2011 la Wayback Machine .
  3. Discuție Debian Issue Tracker Arhivată la 11 aprilie 2018 la Wayback Machine .

Link -uri