Cron zilnic când este executat. Ce este Cron? De doua ori pe zi

Am auzit multe despre cum Linux are un programator de sarcini cron la îndemână. Totuși, nu aveam nevoie să-l folosesc și nu voiam să-i înțeleg setările... consola, multe litere în engleză... era înfricoșător. Dar, din fericire, temerile mele au fost în zadar - totul este simplu până la bază. Articolul va analiza cum să configurați execuția scripturilor dvs. într-un program și, ca exemplu, vom instala „cucul”.

În primul rând, puțin despre cum funcționează în general.

Când sistemul pornește, pornește demonul cron. Poate fi controlat (stop/start/verificare stare) cu comanda: sudo service cron (stop/start/status). Dar acest lucru este rareori necesar.

Daemonul cron însuși doarme de cele mai multe ori și își deschide ușor ochii o dată pe minut pentru a verifica locurile de muncă în acest moment. Dacă nu există sarcini, atunci intră din nou în hibernare.

Joburile sunt localizate în fișiere cu nume egale cu numele de utilizator, iar fișierele în sine sunt localizate în folderul /var/spool/cron/crontabs. Dosarul este protejat de interferențele externe și este accesibil numai superutilizatorului. Dar, fiecare utilizator poate configura un program pentru sarcinile sale fără a cunoaște parola root (superutilizator).

La configurați cron Pentru un utilizator obișnuit, trebuie doar să tastați:

Dacă trebuie să creați o sarcină pentru un alt utilizator, lansați-o cu comanda:

sudo crontab -u user -e

În loc de utilizator, scrieți utilizatorul dorit, de exemplu root.
Când lansați prima dată va fi o întrebare despre editor... Îmi place nano. Este simplu și rulează fără GUI.


Sintaxa sarcinilor este foarte simplă. Să ne uităm la un exemplu dintr-o captură de ecran cu lansarea unui cuc:

0 */1 * * * /home/zegi/bin/kuku

Există 2 câmpuri principale în sarcină: 0 */1 * * * - indică ora la care va fi declanșată comanda. Iar /home/zegi/bin/kuku este calea către scriptul care descrie comanda (comenzile).

Nu ar trebui să fie probleme cu adresa scriptului (zegi este numele de utilizator... nu uitați să-l puneți pe al dvs.). Dar trebuie să explicăm cum să setăm timpul cron pentru execuția scriptului.

În total avem 5 celule de intrare, care sunt separate printr-un spațiu.
1 - minute (numerele de la 0 la 59)
2 - ore (de la 0 la 23)
3 - ziua lunii (de la 1 la 31)
4 - luna din an (de la 1 la 12... de exemplu februarie este 2)
5 - ziua săptămânii (de la 1 la 7. Se folosește săptămâna vestică, când începutul este duminica, adică Dum-1, Luni-2, Mar-3, Mier-4, Jo-5, Vin-6, Sat - 7).

Fiecare celulă trebuie completată. Dacă aveți nevoie ca comanda să fie executată în fiecare lună, atunci setați * în al 4-lea câmp. Același lucru este valabil și pentru celelalte domenii.

Să revenim la exemplul cucului, când scriptul rulează în fiecare oră. Pentru a seta frecvența se folosește / . De exemplu, dacă aveți nevoie ca sarcina să fie executată la fiecare 5 minute, luni, atunci setați:

Dacă aveți nevoie ca sarcina să fie executată în fiecare oră, atunci va trebui să setați un anumit minut. Dacă lăsați un asterisc (* */1 * * *), atunci coroana se va executa în fiecare minut - pentru că sunt îndeplinite condițiile: a verificat toate cele 5 celule și valoarea lor corespunde timpului curent (minute - nu contează Ore - la fiecare oră, și nu doar anumite).
Bara oblică trebuie să fie întotdeauna precedată de un asterisc. De exemplu, alocarea execuției în fiecare minut începând cu data de 30 prin introducerea 30/1 nu va funcționa.

Dacă este necesar ca sarcina să fie efectuată nu ciclic, ci de mai multe ori, atunci valorile sunt scrise separate prin virgule.
De exemplu, trebuie să finalizați o sarcină în zilele lucrătoare la 12:00 și 18:00. Apoi va arăta astfel:

* 12,18 * * 2,3,4,5,6

Când ați terminat de editat sarcinile, nu uitați să salvați modificările (Ctrl+O > enter), apoi puteți ieși (Ctrl+x).

Cron ar trebui să notifice că a apărut o nouă sarcină și este gata să o execute scriind: „crontab: instalând un nou crontab”.

Puteți vizualiza sarcinile create (poate că nu ați făcut nimic pentru dvs., dar administratorul de rețea a configurat ceva pentru dvs.) cu comanda:

Și până la urmă eu însumi script de cuc, care cuc în fiecare oră:

#!/bin/bash
h=`data +%l`
în timp ce [ $h -gt 0 ]
do
joacă ~/kukushka.wav
h=$[$h-1]
Terminat

Puteți descărca sunetul cucului cu comanda:

wget http://dl.dropbox.com/u/24844052/tuksik/kukushka.wav

Jocul este inclus în pachetul sox. În ubuntu îl puteți instala cu comanda.

MIN HOUR DOM LUN DOW CMD

Tabel: câmpuri Crontab și intervale valide (sintaxa Linux Crontab)

1. Programarea sarcinilor pentru un anumit timp

Baza utilizării cron este executarea sarcinilor la un moment specific, așa cum se arată mai jos. Acesta va rula un script de backup complet pe 10 iunie, la ora 8:30.

Vă rugăm să rețineți că câmpul oră folosește un format de 24 de ore, deci 8 AM este 8, 20 PM este 20 de ore.

30 08 10 06 * /home/developer/full-backup

  • Minutul 30 – 30
  • 08 – 08 AM
  • 10 – a 10-a zi
  • * - În fiecare zi a săptămânii

2. Programați sarcinile pentru a fi îndeplinite mai frecvent (de exemplu, de două ori pe zi)

Următorul script folosește suplimentar backup de două ori pe zi în fiecare zi. Acest exemplu realizează backup incremental la 11:00 și 16:00 în fiecare zi. Valorile separate prin virgulă din câmp indică faptul că comanda trebuie executată la fiecare moment specificat.

00 11.16 * * * /home/developer/bin/incremental-backup

00 – al 0-lea minut (începutul orei) 11, 16 – 11 și 16 ore * - în fiecare zi * - în fiecare lună * - în fiecare zi a săptămânii

3. Programează munca pentru un anumit interval de timp (de exemplu, numai în zilele lucrătoare)

Dacă doriți ca rutinele să ruleze în fiecare oră la un anumit interval de timp, utilizați următoarele.

Rutina Cron pentru fiecare zi în timpul programului de lucru

Acest exemplu verifică starea bazei de date în fiecare zi (inclusiv în weekend) în timpul programului de lucru de la 9:00 la 18:00.

00 09-18 * * * /home/developer/bin/check-db-status

00 - minutul 0 (începutul orei) 09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (ore) * - în fiecare zi * - în fiecare lună * - în fiecare zi săptămână

Rutina Cron pentru fiecare zi de lucru în timpul programului de lucru

Acest exemplu verifică starea bazei de date în fiecare zi a săptămânii (cu excepția sâmbătă și duminică) de la 9:00 la 18:00.

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status

00 - al 0-lea minut (începutul orei) 09-18 – 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 (ore) * - în fiecare zi * - în fiecare lună 1-5 - luni, Marți, Miercuri, Joi și Vineri (în fiecare săptămână)

4. Cum să vizualizați intrările Crontab?

Vizualizați fișierele Crontab curente ale utilizatorului.

Pentru a vizualiza fișierele crontab-l de sus cont unix, faceți următoarele.

Developer@dev-db$ crontab -l @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Vizualizați intrările crontab rădăcină

Conectați-vă ca utilizator root (su - root) și rulați crontab-l așa cum se arată mai jos.

Root@dev-db# crontab -l nu există crontab pentru root

Pentru a vedea fișierele altor utilizatori, conectați-vă ca root și utilizați -u (nume utilizator) -l așa cum se arată mai jos.

Root@dev-db# crontab -u username -l @monthly /home/username/monthly-backup 00 09-18 * * * /home/username/check-db-status

5. Cum se editează intrările crontab?

Editarea intrărilor cron ale utilizatorului curent.

Pentru a edita intrările, utilizați cronab -e așa cum se arată mai jos. În mod implicit, intrările crontab curente ale utilizatorului vor fi editate.

Dezvoltator@dev-db$ crontab -e @yearly /home/developer/centos/bin/annual-maintenance */10 * * * * /home/developer/debian/bin/check-disk-space ~ "/tmp/crontab .XXXXyjWkHw" 2L, 83C

Când salvați fișierul, acesta va salva crontab-ul și va afișa următorul mesaj care vă va spune că crontab-ul a fost modificat cu succes.

~ „crontab.XXXXyjWkHw” 2L, 83C scris crontab: instalarea noului crontab

Editarea intrărilor rădăcină crontab

Conectați-vă ca utilizator root (su - root) și faceți crontab -e așa cum se arată mai jos.

Root@dev-db# crontab -e

Editarea intrărilor crontab ale altui utilizator

Pentru a edita intrarea crontab a altui utilizator Linux, conectați-vă ca root și utilizați -u (nume de utilizator) -e așa cum se arată mai jos.

Root@dev-db# crontab -u username -e @monthly /home/username/fedora/bin/monthly-backup 00 09-18 * * * /home/username/ubuntu/bin/check-db-status ~ ~ ~ „/tmp/crontab.XXXXyjWkHw” 2L, 83C

6. Execuția Cron în fiecare minut

În mod ideal, s-ar putea să nu fie nevoie să programați o rulare cron în fiecare minut. Dar înțelegerea acestui exemplu vă va ajuta să înțelegeți celelalte exemple descrise în acest articol.

Bash * * * * * CMD

* - înseamnă o unitate posibilă - adică fiecare minut din fiecare oră de-a lungul anului. De asemenea, folosirea * direct va fi mai mult functie utilaîn exemplele următoare.

Specificarea */5 în câmpul minute înseamnă fiecare 5 minute. Specificarea 0-10/2 în câmpul minutelor înseamnă la fiecare 2 minute pentru primele 10 minute. Astfel, această convenție poate fi utilizată în toate cele 4 domenii.

7. Rulați sarcini Cron în fundal la fiecare 10 minute

Utilizați următoarele dacă doriți să vă verificați spațiul pe disc la fiecare 10 minute.

*/10 * * * * /home/ramesh/check-disk-space

Această sarcină rulează comanda de verificare a discului specificată la fiecare 10 minute timp de un an. Dar poate fi necesar să efectuați verificarea doar în timpul programului de lucru sau invers. Exemplele de mai sus arată cum se face acest lucru.

În loc să specificăm valorile în cele 5 câmpuri, le putem specifica folosind cuvânt cheie așa cum se arată mai jos.

Există condiții speciale în care în loc de 5 câmpuri puteți folosi @ urmat de un cuvânt cheie - cum ar fi repornire, miezul nopții, anual, oră.

Cron cuvinte cheie speciale și semnificația lor

8. Programează munca pentru primul minut al fiecărui an folosind @yearly

Dacă doriți ca jobul cron să ruleze în primele minute ale fiecărui an, puteți utiliza cuvântul cheie @yearly așa cum se arată mai jos. În acest caz, sistemul va funcționa anual întreținere, folosind scriptul de întreținere anuală la ora 00:00 pe 1 ianuarie a fiecărui an.

@yearly /home/developer/red-hat/bin/annual-maintenance

9. Rulați sarcini în fiecare lună folosind cuvântul cheie @monthly

Este similar cu @yearly de mai sus. Dar comanda este executată lunar. Comanda va efectua backup-ul la ora 00:00 pe prima zi a fiecărei luni.

@monthly /home/ramesh/suse/bin/tape-backup

10. Rulați sarcini în fiecare zi folosind @daily

Utilizarea cuvântului cheie @daily va crea un fișier jurnal zilnic pentru a șterge jurnalul la ora 00:00 în fiecare zi.

@daily /home/developer/arch-linux/bin/cleanup-logs „ziua a început”

11. Cum să rulați comanda Linux după fiecare repornire folosind @reboot?

Utilizarea cuvântului cheie @reboot va executa comanda specificată de fiecare dată când sistemul pornește.

@rebootCMD

13. 12. Cum să dezactivez/redirecționez e-mailurile trimise Crontab folosind cuvântul cheie MAIL?

În mod implicit, crontab trimite rezultatul sarcinilor utilizatorului care a instalat sarcina. Dacă doriți să le redirecționați către un alt utilizator, adăugați sau actualizați variabila MAIL în crontab, așa cum se arată mai jos.

Developer@dev-db$ crontab -l MAIL="dezvoltator" @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Dacă doriți să împiedicați deloc trimiterea e-mailurilor, adică opriți trimiterea fișierelor de ieșire crontab, adăugați sau actualizați variabila MAIL în crontab, așa cum se arată mai jos.

13. Cum să rulați joburi Linux Cron în fiecare secundă folosind Crontab

Nu poți seta cron să ruleze în fiecare secundă. Pentru că unitatea minimă de execuție cron este un minut. Într-un scenariu normal, nu este nevoie să rulați o execuție cron în fiecare secundă.

14. Specificarea variabilei PATH în Crontab

În toate exemplele de mai sus am specificat o cale absolută comenzi Linux sau scriptul shell care urmează să fie executat.

De exemplu, în loc să specificați /home/developer/tape-backup , dacă doriți să specificați doar tape-backup , adăugați /home/developer la variabila PATH în crontab, așa cum se arată mai jos.

Developer@dev-db$ crontab -l PATH=/bin:/sbin:/usr/bin:/usr/sbin:/home/developer @yearly annual-maintenance */10 * * * * check-disk-space

15. Instalarea Crontab dintr-un fișier Cron

În loc să editați direct fișierul crontab, puteți adăuga toate intrările în fișierul cron. Dacă fișierul are aceste intrări, le puteți descărca sau instala în cron, așa cum se arată mai jos.

Notă: Acest lucru va crea un fișier cron-file.txt în crontab, care va elimina intrările cron anterioare. Deci, vă rugăm să fiți atenți când încărcați intrări cron din cron-file.txt:

developer@dev-db$ crontab -l nu crontab pentru dezvoltator $ cat cron-file.txt @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space developer@dev -db$ crontab cron-file.txt developer@dev-db$ crontab -l @yearly /home/developer/annual-maintenance */10 * * * * /home/developer/check-disk-space

Original: Utilizarea cron scheduler pe sistemele Linux
Autor: Rares Aioanei
Data publicării: 29 septembrie 2011
Traducere: A. Krivoshey
Data traducerii: noiembrie 2011

1. Introducere

Dacă aveți deja ceva experiență în administrarea sistemului Linux, ar trebui să știți ce este cron și pentru ce este folosit. Dacă abia începeți să lucrați cu Linux, atunci aceste cunoștințe vă vor fi utile. Chiar dacă ați învățat deja cum să utilizați cron, acest articol vă va ajuta să vă îmbunătățiți cunoștințele.
Numele cron provine de la Cronos, personificarea greacă antică a timpului. Și acesta este un nume bine ales, deoarece scopul principal al cron este de a ajuta la programarea diferitelor sarcini pe care sistemul trebuie să le termine la un moment dat. Dacă ați folosit Windows, probabil că ați trebuit să căutați în utilitarul Sarcini programate. În general, scopul programelor este similar, dar implementarea este diferită. Cron este proiectat pentru sarcini serioase de administrare a sistemului și este mai flexibil. Un exemplu de sarcină din lumea reală este backup. V-ar plăcea să faceți backup manual de date pe sute de mașini? Cred că nu. Doar scrieți un script simplu folosind rsync, programați-l să ruleze, spuneți zilnic și uitați de el. Tot ceea ce este necesar în viitor este să verificați jurnalele din când în când. Unii chiar folosesc cron pentru a le aminti de evenimente personale importante, cum ar fi zilele de naștere. Dar cron este doar un demon care rulează joburile pe care le specificați. Există un utilitar care să ajute la editarea/adăugarea/ștergerea acestor sarcini? Desigur, există și se numește crontab (din tabelul cron). Cu toate acestea, vom avansa secvențial și vom începe cu instalarea.

2. Instalare cron

Majoritatea distribuțiilor folosesc Vixie Cron și alte derivate ca implementare implicită a cronului și asta este ceea ce vom acoperi în acest articol. În plus, aproape toate distribuțiile au deja cron preinstalat, deoarece este o parte foarte importantă a sistemului Linux. Deși, de obicei, utilizatorul obișnuit nu va lucra niciodată direct cu acesta, sistemul și multe aplicații folosesc cron ( bun exemplu este o actualizare periodică a bazei de date a paginilor de manual). O excepție notabilă este Gentoo, unde trebuie să instalați manual vixie-cron și să-l adăugați la nivelul de rulare implicit. Pe Arch, Debian, Slackware, Ubuntu, Fedora și OpenSUSE, cron este instalat implicit și pornește automat când sistemul pornește. Sperăm că veți studia paginile de manual cron și crontab, deoarece multe distribuții folosesc versiuni corectate ale acestora pentru a integra mai bine programul într-o anumită distribuție. Prin urmare, există posibilitatea ca o funcție disponibilă în Gentoo, de exemplu, să nu fie disponibilă în Slackware. Oricum, nu e nimic lectură mai bună pagini de manual, mai ales dacă aveți de-a face cu program nou, pe care plănuiți să-l folosiți destul de des.

3. Folosind cron

În primul rând, trebuie să ne asigurăm că cron rulează:

$ps fals | grep cron

Dacă nu există nimic în ieșire, verificați dacă cron rulează și adăugați-l la serviciile implicite, astfel încât să pornească data viitoare când porniți. Cum se face acest lucru depinde de distribuție. Pe sistemele Debian, comanda ar trebui să scoată ceva de genul acesta:

Rădăcină 1424 0,0 0,0 22000 884 ? Ss 13:56 0:00 /usr/sbin/cron

Acum să punem cron să funcționeze. Mai întâi trebuie să ne gândim ce comandă vom folosi. Are nevoie de privilegii de root? Să presupunem că folosim crontab pentru a adăuga un script simplu care să ruleze la fiecare cinci minute ca utilizator simplu.

3.1. Crontab

3.1.1. Exemplu

Să scriem un script simplu care va afișa o casetă de dialog obișnuită bazată pe blesteme în terminal (dialog și orice emulator de terminal sunt necesare - folosim xterm):

#!/bin/sh xterm -e "dialog --msgbox "Testing cron..." 234 234" # Acesta este un exemplu foarte simplu, tratați-l așa cum este

Să denumim fișierul crontest.sh și să îl facem executabil, deoarece tot ce este rulat folosind cron trebuie să fie executabil:

$ chmod +x crontest.sh

Acum trebuie să edităm tabelul crontab al utilizatorului pentru a adăuga o intrare pentru scriptul nostru minunat:

E este folosit pentru editare, -r pentru ștergere. Fii foarte atent! Mulți administratori de sistem au introdus neglijent -r în loc de -e, mai ales că aceste chei sunt situate una lângă cealaltă și au șters toate intrările din crontab. În orice caz, cel mai probabil veți vedea un fișier complet comentat (crontab folosește # pentru a desemna comentarii) care oferă exemple și descrie scopul câmpurilor de intrare. Da, o înregistrare constă din câmpuri, ultimul dintre care specifică comanda care trebuie executată, iar restul - caracteristici de sincronizare. Deci, intrarea noastră crontab pentru un script care rulează la fiecare cinci minute arată astfel:

$ */5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Trebuie să exportăm variabila DISPLAY, astfel încât xterm să nu afișeze erori precum „DISPLAY este nu setat„. Acum să ne uităm la scopul fiecărui domeniu.

3.1.2. câmpurile crontab

Dacă ați mai lucrat cu metacaracterele, nu veți avea nicio problemă să învățați cum să utilizați un asterisc în crontab: înseamnă că toate valorile posibile de câmp sunt înlocuite. Câmpurile implicite din Linux (ai grijă, unele sisteme Unix folosesc implementări cron diferite) indică, de la stânga la dreapta: minut, ora, ziua lunii, luna, ziua săptămânii, anul (opțional) și comanda care trebuie executată. Deci, dacă vrem ca scriptul nostru să ruleze la fiecare cinci minute, în fiecare oră, în fiecare zi, în fiecare lună și în fiecare an, intrarea noastră ar trebui să arate astfel:

5 * * * * export DISPLAY=:0 && /home/$user/crontest.sh

Vă îndemnăm să aveți grijă la câmpul zilei săptămânii: în țara dumneavoastră prima zi a săptămânii poate fi luni, dar în alte țări poate fi duminică. Dacă lucrați într-un mediu multicultural, multinațional, trebuie să vă amintiți caracteristicile culturale și religioase. Cron trimite notificări utilizatorului care deține intrarea la adresa de e-mail implicită ($user@$hostname). Dacă doriți să schimbați adresa de e-mail, adăugați „MAILTO=$email_address” la crontab. Dacă doriți să dezactivați această funcție, adăugați „>/dev/null 2>&1” la sfârșitul intrării.
Acum, dacă v-ați săturat să apară fereastra la fiecare cinci minute, rulați din nou crontab -e pentru a șterge sau, mai simplu, comentați intrarea. Pentru a vizualiza conținutul crontab, utilizați pur și simplu opțiunea -l (listă).

3.2. O privire la /etc/

3.2.1. scripturi cron

În secțiunile anterioare am rezolvat probleme simple și banale, doar pentru a ne încălzi, iar acum ne vom pune la treburi serioase. Titlu aceasta sectiune se referă la directoarele din /etc care sunt responsabile pentru sarcinile periodice de întreținere a sistemului. De exemplu, în directorul /etc/cron.weekly există un script man-db care actualizează baza de date a paginii de manual. Toate aceste scripturi sunt incluse în distribuție și sunt lansate conform fișierului /etc/crontab. Prin urmare, dacă doriți să înțelegeți cum funcționează, cel mai bine este să studiați conținutul acestui fișier. Veți vedea intrări similare cu ceea ce am făcut mai devreme, dar comenzile executate vor fi diferite. „run-parts” este un mic utilitar conceput pentru a rula toate scripturile dintr-un director dat.
Cititorul atent poate observa că există un câmp în /etc/crontab pe care nu l-am văzut când ne-am editat crontab - acesta este câmpul „utilizator”. Acest lucru se face din motive de securitate. Dacă introduceți crontab -e ca $user, aceasta înseamnă că orice comandă va fi rulată ca $user. Dar, deoarece /etc/crontab este la nivelul întregului sistem, este necesar să setați în mod explicit utilizatorul, deoarece poate fi necesar să rulați anumite scripturi sau programe ca alt utilizator decât root, mai ales dacă Administrator de sistemîi pasă de securitate și adaugă utilizatori și grupuri în sistem după cum este necesar. Exemplu: backup nu necesită privilegii complete de root, doar drepturi de citire și scriere pentru anumite directoare, astfel încât administratorul creează un grup de backup și un utilizator backupadmin cu drepturile necesare și rulează scripturi de backup în fiecare noapte folosind scrierea:

30 23 * * * backupadmin /home/backupadmin/nightlybkup.sh

Această intrare rulează scriptul nightlybkup.sh în fiecare seară la 23:30. Dacă vrem să rulăm backup-ul doar de luni până vineri, trebuie să ne edităm intrarea:

30 23 * * 1-5 backupadmin /home/backupadmin/nightlybkup.sh

Dacă doriți să executați copii de siguranță numai în zilele de luni, miercuri și vineri, înlocuiți „1-5” cu „1,3,5”. Când știi exact de ce ai nevoie, cron devine clar și ușor de utilizat.

4. Gândirea la siguranță

Există multe situații în care nu doriți ca un utilizator cu acces la sistemul dvs. să poată crea intrări crontab. Aici intră în joc fișierele /etc/cron.deny și /etc/cron.allow. Utilizarea lor este similară cu /etc/hosts.allow și /etc/hosts/deny, așa că dacă ați lucrat cu aceste fișiere înainte, veți fi chiar acasă. Aceste două fișiere (cron.deny și cron.allow) nu sunt implicit în sistem, cel puțin pe sistemul la care lucrăm, așa că în mod implicit toată lumea are permisiunea de a crea intrări crontab. Puteți verifica ce fișiere legate de cron sunt în directorul dvs. /etc cu comanda:

$ ls /etc | grep cron

Din nou, vă reamintim că toate cele de mai sus sunt valabile pentru Linux, deoarece absența acestor fișiere pe Solaris înseamnă exact opusul, în plus, fișierele sunt localizate în locuri diferite. Cron.allow este bifat mai întâi, așa că de obicei introducem „ALL” în cron.deny și apoi adăugăm utilizatorii cărora dorim să le acordăm acces în cron.allow.

5. Exemple de utilizare a cron

In fiecare minut:

* * * * * /usr/local/bin/check-disk-space.sh

Comanda va fi executată în fiecare minut, zi și lună.

Pe zile:

30 02 10 01,06,12 * /home/$user/bin/checkdrive.sh

Această comandă va rula scriptul checkdrive.sh la ora 02:30 în fiecare zi de 10 ianuarie, iunie și decembrie.

La fiecare jumatate de ora:

00.30 * * * * /home/$user/backupdata.sh

Doar in weekend:

* * * * 6.7 /usr/bin/weekend

De doua ori pe zi:

20 11.16 * * * /usr/sbin/command

Comanda va fi executată în fiecare zi la 11:20 și 16:20.

În fiecare oră într-o anumită zi:

01 * 2 05 * /sbin/system_command

La fiecare 10 minute pe parcursul a cinci zile lucrătoare (luni - vineri):

*/10 * * * 1-5 /usr/local/bin/check-disk-space.sh

Doar în timpul programului de lucru:

00 09-17 * * 1-5 /usr/local/bin/check-disk-space.sh

Această comandă va fi executată o dată pe zi, între orele 9:00 și 17:00.

0 0 1 1 * /usr/local/bin/check-disk-space.sh

De două ori pe an la 12:00 și 24:00

0 0,12 1 */6 * /usr/local/bin/check-disk-space.sh

Această comandă va fi executată de două ori pe an (la fiecare 6 luni) la 12:00 și la 24:00.

În fiecare a treia zi de joi a oricărei luni, la ora 10:00:

0 10 15-21 * 4 /usr/local/bin/check-disk-space.sh

În fiecare zi, la 20 de minute după fiecare oră pară:

20 0-23/2 * * * /usr/local/bin/check-disk-space.sh

Această comandă va fi executată în fiecare zi la 20 de minute după fiecare oră pară (0:20, 2:20...22:20).

6. Concluzie

Dacă la început ați găsit intrările crontab greu de înțeles și confuze, vă asigur că, folosindu-le constant, veți reține foarte curând ordinea și scopul tuturor câmpurilor, precum și numele și locația tuturor fișierelor care trebuie să fie fi editat. Este nevoie doar de practică.

Dacă ți-a plăcut articolul, distribuie-l prietenilor tăi:

Introducere

Prin găzduirea site-ului, dorim să asigurăm funcționarea neîntreruptă fără participarea noastră.

Aceasta înseamnă că trebuie să automatizați procesele, iar aici cron vine în ajutor.

Cron- program, daemon pentru pornire automată programe și scripturi de pe server la momentul necesar.

Crontab în panoul de control Timeweb

Dacă contul dvs. este plătit și nu ați fost prins cu spam, atunci secțiunea Crontab este disponibilă și funcțională:

Interfața Crontab din panoul de control Timeweb este prietenoasă și intuitivă: chiar și utilizatorii începători fără experiență anterioară cu cron își pot da seama cu ușurință cum să creeze sarcini. Odată ce ai creat o sarcină, poți mod automat efectuați copii de siguranță, trimiteri prin corespondență, ștergeți memoria cache și efectuați alte acțiuni standard.

Crontab din panoul de control Timeweb va ajuta orice utilizator să-și automatizeze sarcinile și să obțină rezultatele de care au nevoie.

După informațiile de bază, voi vorbi despre nuanțele care sunt importante de luat în considerare atunci când lucrați cu cron.

Sunt create sarcini noi în secțiunea Crontab. Pentru a face acest lucru va trebui să completați următoarele câmpuri:

  • Nume. Acesta este numele sarcinii noastre.
  • Tip fișierȘi calea către fișier. În funcție de limba în care este scris scriptul, selectați tipul de fișier și calea către acesta. Dacă o sarcină rulează un script care necesită variabile de server web, rularea acesteia direct prin interpretul PHP are ca rezultat erori. Prin urmare, în cazul în care utilizați un script care funcționează atunci când este lansat prin bara de adrese a browserului, trebuie să selectați tipul de fișier „HTTP request” și să specificați URL-ul cererii în același mod în care este specificat în bara de adresa„site-ul_dvs./calea/către/script/script.php?parameter1=value1¶meter2=value2”.

Dacă este necesar, specificați un cont de administrator în secțiunea Crontab. Mesajele vor fi trimise la această cutie poștală în cazul în care un mesaj ar apărea în consolă la rularea scriptului.

Nuanțe

Mici nuanțe care merită reținute atunci când lucrați cu cron.

1. Cron funcționează dacă contul este plătit și nu există restricții.

Puteți verifica starea creând un fișier cu extensie php (de exemplu twtest.php) cu codul:

Și accesarea fișierului în browser.

În browser veți vedea următoarele informații:

uid=12345(autentificare) gid=600(clienți) grupuri=600(clienți) - indică faptul că cron și mail sunt disponibile

uid=12345(autentificare) gid=600(clienți) grupuri=601(clienți noi),600(clienți),660(spammeri) - scrie pentru a sprijini

2. Fișierul pe care îl rulați trebuie să aibă permisiuni de citire și executare (r+x).

În mod implicit, fișierele de pe găzduire sunt create cu drepturi 600. Puteți schimba drepturile la cele necesare prin ssh cu comanda:

Chmod 744 twtest.php

sau în Manager de fișiere, Timeweb are instrucțiuni despre asta:

3. Pentru a nu aglomera e-mailul cu scrisori inutile,configurați scripturi executate frecvent pentru a scrie jurnalele într-un fișier, și nu către consolă.

CRON peste SSH

Configurarea planificatorului prin ssh a fost descrisă de atâtea ori încât este imposibil să spunem ceva nou.

Conectarea prin ssh este descrisă în detaliu în centrul de ajutor Timeweb:

După citire, trebuie să găsiți fișierul cu scriptul, deplasându-vă între directoare cu comanda cd. După ce ați găsit fișierul, introduceți pwd și copiați calea (exemplu „/home/c/cc123456/public_html/test/”)

Dacă nu știți ce permisiuni are un fișier, introduceți:

Nume fișier Chmod 744

Când vă conectați prin ssh, puteți edita sarcini cu comanda

Crontab -e

Prima dată serverul vă va cere să selectați un editor:

Selectați un editor. Pentru a schimba mai târziu, rulați „select-editor”. 1. /bin/ed 2. /bin/nano<---- easiest 3. /usr/bin/mcedit 4. /usr/bin/vim.basic 5. /usr/bin/vim.tiny Choose 1-5 :

Sistemul indică un simplu editor nano sub numărul 2. Dacă nu ați calculat forțele sau ați selectat accidental vi, nu vă alarmați, apăsați Esc, apoi introduceți două puncte q și apăsați enter.

Pentru a schimba editorul, introduceți comanda:

Select-editor

și selectați nano.

Temele sunt scrise rând cu rând. Exemplu:

1 2 3 4 5 /opt/php56/bin/php /home/с/сс123456/public_html/twtest.php

Semnificațiile primelor cinci valori:

  • 1 minut - un număr de la 0 la 59
  • 2 ore - un număr de la 0 la 23
  • A 3-a zi a lunii - un număr de la 1 la 31
  • Numărul de 4 luni în an - un număr de la 1 la 12
  • A 5-a zi a săptămânii - un număr de la 0 la 7 (0-duminică, 1-luni, 2-marți, 3-miercuri, 4-joi, 5-vineri, 6-sâmbătă, 7-duminică)

Pentru fiecare parametru este posibil să specificați numărul necesar de valori separate prin virgule. De exemplu, dacă scrieți 8.23 ​​​​în câmpul „ore”, atunci sarcina se va desfășura la 8 a.m. și la 11 p.m. Puteți seta intervalul: 9-18 va însemna că programul va începe în fiecare oră de la 9 la 18 ore inclusiv. Simbolul „*” înseamnă „toate valorile posibile”. De exemplu, specificarea „*” în câmpul „ore” ar însemna „rulați la fiecare oră”. Simbolul „/” este folosit pentru a indica frecvența suplimentară a lucrării. De exemplu, „*/3” în câmpul „minute” înseamnă „la fiecare trei minute”.

„/opt/php*/bin/php” unde php*/ = php53/ php5.3/ php54/ php5.4/ php56/ php5.6/ php70/ php7.0/ php71/ php7.1/

Ultima intrare indică calea către fișier și numele fișierului pe care îl lansăm.

Nuanțe

  1. Când faceți modificări în panoul de control din secțiunea „Crontab”, modificările la intrările făcute prin ssh vor fi șterse!
  2. Dacă sunt definite atât câmpurile „ziua lunii”, cât și „ziua săptămânii”, atunci un astfel de job va fi executat în fiecare zi specificată a săptămânii, indiferent de ziua lunii. De exemplu, următoarea comandă va rula la 9:19 în fiecare miercuri și în fiecare 7 a lunii, chiar dacă ziua 7 nu este aceeași miercuri.

19 9 7 * 3 /opt/php56/bin/phpn /home/s/ss123456/public_html/twtest.php

Cazuri speciale

Pentru a rula o sarcină mai des decât o dată pe minut, utilizați somnul.

Pentru a face acest lucru, scrieți în crontab:

* * * * * /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php; /bin/sleep 30; /opt/php56/bin/php /home/k/konoplev/tmp/twtest.php

pentru a rula fișierul la fiecare 30 de secunde.

Uneori, când utilizați programatorul programului cron, nu știți cât timp va dura rularea scriptului. Pentru a evita rularea unui script de două ori, este necesară o verificare pentru a vă asigura că rularea anterioară a scriptului s-a încheiat.

Opțiunea logică ar fi să creați un fișier de blocare și să verificați prezența fișierului atunci când rulați scriptul. Dar găzduirea Timeweb, ca și alte site-uri de găzduire, are o limitare de procesor. Scriptul depinde de condiții și de timpul de execuție, ceea ce înseamnă că nu putem prezice timpul de execuție al scriptului. Dacă scriptul este executat cu încălcarea regulilor și restricțiilor ( ), atunci procesul se va încheia pe partea de găzduire. Apoi fișierul de blocare nu va fi șters, ceea ce înseamnă că scriptul nu va fi rulat de cron până când fișierul este șters.

Maestrul de la departamentul de inginerie a explicat cum se rezolvă problema.

Mai întâi, creați un script sh în fișierul /home/c/cc123456/tmp/twtest.sh:

#!/bin/bash command=$@ no_spaces=`echo $comandă | sed -e "s/\s/_/g" -e "s|/|_|g"` pidfile=/var/tmp/$no_spaces.pid lockfile=/var/tmp/$no_spaces.lock dacă [[ -e $pidfile ]] atunci pid=`cat $pidfile 2>/dev/null` ps h $pid >/dev/null 2>/dev/null dacă [[ $? -eq 0 ]] apoi exit 1 else rm $lockfile fi fi echo $$ > $pidfile /usr/bin/flock -w 0 $lockfile $comanda rm $pidfile

În panoul de control, în secțiunea crontab, selectați tipul „Fișier binar executabil”.

În câmpul „Cale completă” scriem:

/home/c/cc123456/tmp/twtest.sh /opt/php56/bin/php /home/c/cc123456/tmp/twtest.php

Unde

  • /home/c/cc123456/tmp/twtest.sh - scriptul nostru de testare
  • /opt/php56/bin/php - calea către interpretul dorit
  • /home/c/cc123456/tmp/twtest.php - calea către scriptul nostru

Indicăm timpul necesar de lansare și venim cu un nume.

Concluzie

Acum știi cum să lucrezi cu cron și să rulezi sarcini automat. Mai mult informatii detaliate despre cron, uită-te în „om cron”. Noroc!

În sistem Linux Lansarea automată a joburilor este realizată de demonul crond și nu numai administratorul de sistem, ci și utilizatorii pot crea programe pentru lansarea automată a joburilor.

Cum funcționează crond?

Principiul demonului crond este simplu. După pornire (de obicei când sistemul pornește), demonul se trezește în fiecare minut și verifică dacă vreun program este programat să ruleze în acel minut. Dacă astfel de programe sunt găsite, demonul le pornește și le trimite prin e-mail mesaje către utilizatorii care au programat o lansare.

Programarea sarcinilor

Crearea unui program nu este o sarcină dificilă. Programul se află într-un fișier crontab separat. Fiecare linie a fișierului conține o sarcină care trebuie rulată la un anumit moment.

Format de fișier Crontab

Partea oră-data constă din cinci câmpuri numerice, separate prin spații, care definesc ora la care rulează jobul:

Pentru comoditatea completării acestor câmpuri, au fost introduse următoarele reguli:

  • Puteți specifica valori ca intervale numerice. De exemplu, intervalul 1-3 în câmpul oră înseamnă 1.00, 2.00 și 3.00 miezul nopții, 2-4 în câmpul ziua săptămânii - marți, miercuri sau joi.
  • Intervalele pot fi setate în trepte mai mari de unu. De exemplu, pentru a indica fiecare a doua oră începând de la miezul nopții, ați seta intervalul la 0-23 în trepte de 2 separate printr-o bară oblică: 0-23/2
  • Un asterisc (*) indică întreaga gamă de valori ale câmpului, de la minim la maxim. De exemplu, în câmpul ziua lunii asteriscul înseamnă intervalul 0-31, în câmpul ziua săptămânii - 0-7
  • Ziua săptămânii sau a lunii poate fi indicată prin primele trei litere ale numelui său (în engleză).

Exemple de timp-dată

Câteva exemple de completare a câmpurilor oră-date:

0 1 * * * Rulați sarcina zilnic la 1.00 miezul nopții 30 14 * * 0 Rulați sarcina duminica la 14.30 0 23-7/2.8 * * * Rulați sarcina la fiecare 2 ore de la 23.00 la 7.00 și la 8.00 0 12 * 1 luni Run slujba la prânz în fiecare luni din ianuarie a fiecărui an 0 12 2 feb * Rulați slujba la prânz în data de 2 februarie a fiecărui an

Câmp de comandă

Câmpul de comandă este separat de câmpurile dată-oră prin unul sau mai multe spații și se extinde până la sfârșitul liniei. Comenzile sunt procesate de shell-ul /bin/sh.

De exemplu, următoarea intrare din fișierul crontab solicită rularea /usr/sbin/backup la ora 1:00 a.m. în fiecare zi:

0 1 * * * /usr/sbin/backup

Unele comenzi (cum ar fi e-mailul) necesită introducerea de la dispozitivul de intrare standard. Acest lucru este indicat folosind un semn de procente (%). Primul astfel de caracter indică începutul introducerii standard, fiecare caracter ulterior indică o schimbare de linie.

Editarea fișierului crontab

Fișierul crontab este editat cu comanda crontab -e. Sunt posibile două abordări:

  • crearea unui fișier nou cu toate intrările care ar trebui să fie incluse în fișierul crontab și apoi scrierea lui pe disc sub acest nume folosind comanda crontab;
  • editarea directă a fișierului folosind comanda crontab -e.

Scrieți din fișier

Pentru a scrie conținutul unui fișier crontab dintr-un alt fișier, trebuie să creați acel alt fișier (în mod obișnuit editor de text) cu toate intrările care ar trebui să alcătuiască fișierul crontab. Aceasta ar putea fi, de exemplu, următoarea intrare:

0 1 * * * /usr/sbin/backup

Fișierul creat ar trebui să primească un nume adecvat, cum ar fi joburi cron. După fișierul specificat creat, conținutul său trebuie scris în fișierul crontab cu comanda:

~$ crontab cronjobs

Conținutul fișierului cronjobs va înlocui complet conținutul fișierului crontab utilizator dat. Folosind această metodă, orice utilizator își poate edita fișierul crontab. Superutilizatorul are drepturi speciale pentru a edita fișierele crontab ale altor utilizatori. Editarea fișierului altcuiva este indicată de indicatorul -u. De exemplu, prin comandă:

~# crontab -u oleg cronjobs

fișierul cronjobs este scris ca fișier crontab al utilizatorului oleg.

Editarea directă a fișierului crontab

Comanda crontab vă permite să evitați operația în mai mulți pași de a crea un fișier separat. Dacă lansați comanda crontab cu opțiunea -e, puteți edita direct fișierul crontab.

În mod implicit, folosind comanda crontab cu opțiunea -e, fișierul crontab este încărcat în editor. Editor Vi- puternic, deși instrument complex, popular printre utilizatori experimentați Unix. Cineva care preferă un alt editor, de ex. Xedit, poate seta valoarea corespunzătoare a variabilei de mediu EDITOR:

~$ export EDITOR=xedit

După aceasta, introduceți comanda

face ca fișierul crontab să fie deschis în editorul specificat.

Așa cum un utilizator normal își poate edita propriul fișier crontab, un superutilizator poate edita fișierele crontab ale altor utilizatori. Pentru a face acest lucru, utilizați comanda:

~# crontab -u nume de utilizator -e

Vizualizarea fișierului crontab

Pentru a vizualiza conținutul fișierului crontab, introduceți comanda:

Superutilizatorul poate vizualiza fișierele crontab ale altor utilizatori:

~# crontab -u nume de utilizator -l

Eliminarea fișierului crontab

Pentru a șterge conținutul fișierului crontab, utilizatorul introduce comanda:

Superutilizatorul poate șterge fișierele crontab ale altor utilizatori.

Acțiune