Cum să setați ora în cron. Specificarea variabilei PATH în Crontab. Câteva exemple utile pentru crearea sarcinilor repetate frecvent

Cron (coroană), Crontab (crontab), Gestionar de sarcini- toți cei implicați în „construcția șantierului” au auzit aceste nume de mai multe ori. Deci, ce este Cron? Cum să lucrezi cu el? De ce aveți nevoie de Cron și cum să îl configurați corect? Vom analiza toate aceste întrebări astăzi.

Primul lucru pe care vreau să-l remarc imediat: Cron, Crontab, Gestionar de sarcini- este tot același lucru, nu vă încurcați de varietatea denumirilor.

În practica oricărui webmaster, va fi invariabil nevoia de a rula anumite sarcini într-un program. Acestea. Pur și simplu scrieți comanda de care aveți nevoie pentru a efectua o anumită sarcină timp specificat, si asta e. Apoi totul se întâmplă fără participarea ta - automat și cel mai bine, la momentul de care ai nevoie.

De exemplu, trebuie să trimiteți periodic notificări partenerilor prin e-mail. Sau doriți să setați salutări sau mementouri automate. Sau ai un director de site-uri și vrei frecventa specificata a verificat scriptul directorului backlink-uri etc. Toate aceste sarcini pot fi automatizate cu ușurință, încredințându-le lui Cron sau, după cum se spune și ei - Planificator de sarcini. Și există scenarii în care operatie normala Cron este o necesitate.

Aproape toți furnizorii moderni de găzduire oferă deja funcție gata făcută Planificator de sarcini. Dacă nu există o astfel de funcție pe Gazduire, atunci este mai bine să nu contactați o astfel de companie de Gazduire. Cron în zilele noastre nu mai este un lux, iar dacă Hosting nu oferă un task scheduler în pachetul de servicii, este mai bine să cauți o altă companie, probabil că nu vor avea alte funcții importante.

Deci, să ne uităm la tot actiuni practice folosind setarea Cron folosind exemplul rusesc cPane l (panoul de control al site-ului) Compania de găzduire Hudson. De ce exact Hudson? Este simplu - site-ul meu locuiește aici și îmi place foarte mult această găzduire: pachet complet toate cele mai multe servicii posibile pentru un pret foarte rezonabil.

Deși decorul Planificator de sarcini se întâmplă cam la fel peste tot.

Accesați panoul de control al site-ului, în în acest caz, Acesta este cPanel (sunt altele). Accesul vă este oferit imediat după cumpărare Gazduire, mergeți mai jos și găsiți această secțiune, Instrumente suplimentare:

Găsim în această secțiune Gestionar de sarciniși faceți clic pe el. Acest meniu este uneori numit Panoul Cron. Iată cum este caracterizat Cron:

„Planificatorul de sarcini vă permite să rulați comenzi la o oră specificată fără participarea dvs. Acest lucru vă permite să automatizați munca periodică periodică. Programatorul de sarcini este foarte flexibil și vă permite să automatizați execuția oricăror comenzi pe care doriți să le executați. De exemplu , puteți spune programatorului să șteargă fișiere temporareîn fiecare săptămână, astfel încât să nu ocupe prea mult spațiu pe disc.”

Există două opțiuni pentru gestionarea bolii Crohn din care să alegeți:

Standard și Avansat (stil Unix), să ne uităm la fiecare dintre ele.

Prima varianta. Faceți clic pe butonul Standard, se deschide fereastra de instalare a activității:

După cum puteți vedea, totul este foarte simplu aici. Trebuie doar să setați timpul de execuție a comenzii indicând în câmpurile corespunzătoare când va rula comanda și la ce oră: minute, Ora, Zi, Lună, Zi a săptămânii. Și, desigur, introduceți comanda de lansare în sine în câmp: Comanda pentru a rula.

Valorile pot fi scrise fie manual (în câmpul din stânga), fie folosind lista derulantă (săgețile din dreapta).

Să ne dăm seama ce am scris aici. Și noi am scris următoarea sarcină: rulați comanda pentru execuție:
/usr/bin/php /home/freeman/domains/public_html/cron/new_day.php
la fiecare 30 de minute, la fiecare 6 ore, în fiecare zi a lunii ianuarie dacă cade luni.

După instalarea sarcinii, faceți clic pe butonul Adăugați o nouă lucrare Cron.

Nu e clar ce ai scris? :) Să ne uităm la a doua opțiune, apoi o să explic mai detaliat. Revenim la pagina anterioară.

A doua varianta. Faceți clic pe butonul Avansat (stil Unix), se deschide fereastra de instalare a activității:

Îmi place mai mult această opțiune pentru configurarea sarcinii pentru Krohn. Și deși se numește Advanced, în opinia mea este mai simplu și mai convenabil.

Aici, la fel ca în primul caz, trebuie să indicați când va fi lansată comanda, mai indicăm: minute s, Ora s, Zi, Lună, Zi a săptămâniiși însăși sarcina pentru execuție în teren Echipă. După aceea, faceți clic pe butonul Adăugați Cronjob. Sarcina a fost stabilită. Pagina este în curs de actualizare:

Și puteți adăuga o sarcină nouă repetând din nou întreaga procedură. Puteți șterge o sarcină făcând clic pe cruce de lângă sarcină din dreapta.

Mai există un parametru opțional, dar recomand să-l specificați: acesta Adresa de e-mail. La această adresă va fi trimis un raport privind executarea comenzii. Câmpul este opțional, dar este mai bine să introduceți adresa pentru a fi la curent cu problema, dacă ceva nu merge bine, Kron vă va informa despre asta într-o scrisoare, iar dacă scrisoarea ajunge goală, atunci totul este OK!

Ce am scris aici? Rulați comanda la 11 minute, la fiecare a 2-a oră, în fiecare zi, în fiecare lună, în 1, 3, 5, 7 zile ale săptămânii.

În câmpul de selecție: minute indicați minutul (sau minutele) la care sarcina va fi lansată pe teren Ora indicați ora (sau orele) la care va fi executată sarcina, precum și ziua(le) și luna(le), în fiecare câmp puteți specifica atât o anumită oră, cât și un interval.

De exemplu, puteți specifica nu doar 11 minute, ci 11-15 (interval), aceasta înseamnă că sarcina va rula la fiecare 11, 12, 13, 14, 15 minute. Sau specificați minute specifice, de exemplu: 11, 14, 18 - aceasta înseamnă că sarcina va fi lansată la 11, 14 și 18 minute. Puteți folosi și semnul * (asterisc)- denotă fiecare. Daca pui * (asterisc)în câmpul Minute, apoi sarcina va fi lansată în fiecare minut, adică. de 60 de ori pe oră.

În fiecare câmp puteți specifica atât o anumită oră, cât și un interval și, de asemenea, puteți utiliza asteriscuri.

Record */2 mijloace: la fiecare 2 ore. Toate aceste variații de înregistrare se aplică tuturor câmpurilor ( minute s, Ora s, Zi, Lună, Zi a săptămânii) când se specifică sarcina către Kron. Înțelegeți că pot exista milioane de opțiuni. Rulați sarcina pentru execuție, chiar și în fiecare minut pe tot parcursul anului. Desigur, o astfel de nevoie nu apare aproape niciodată, dar teoretic există o astfel de posibilitate.

Și, de asemenea, rețineți că unele site-uri de găzduire impun restricții privind rularea Crohn, de exemplu, nu mai mult de 3 - 10 ori pe oră. De ce? Acest lucru creează o încărcare destul de vizibilă pe server. Pentru încălcare, contul dvs. poate fi blocat.

Acum să ne dăm seama cum este completat câmpul Comanda pentru a rula(în prima opțiune) sau Command (în a doua opțiune).

Sarcina este specificată după cum urmează.

În primul rând, indicați calea către PHP pe serverul dvs., pe serverul meu calea este /usr/bin/php, a dvs. poate fi diferită, verificați cu administratorii serverului dvs., după calea către PHP puneți un spațiu și scrieți calea internă completă către fișierul pe care ar trebui să-l ruleze Cron. Să presupunem că am nevoie de Cron pentru a rula fișierul mail.php, cunoscând calea internă către fișier, scriu următoarele:

public_html/cron/mail.php

acestea. în folderul rădăcină public_html, există un folder cron în care se află fișierul mail.php și comanda completă pentru a rula fișierul mail.php va arăta astfel:

/usr/bin/php /public_html/cron/mail.php

Pe diferite site-uri de găzduire, calea către PHP poate fi diferită și scrisă diferit, Dosarul rădăcină locația site-ului nu este întotdeauna cazul public_html, deci dacă nu exemplu concretînregistrările sarcinii pentru Crohn, este mai bine să întrebați administratorul despre acest lucru, descriind ceea ce doriți să obțineți ca rezultat. bun

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 o experiență sistemică administrare Linux, atunci ar trebui să știți ce este cron și pentru ce este. 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 programare. diverse sarcini, pe care sistemul trebuie să le execute 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 pentru sarcini serioase administrarea sistemuluiși are o flexibilitate mai mare. Un exemplu de problemă 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 foarte parte importantă sisteme Linux. Cu toate că utilizator obișnuit, de regulă, nu funcționează niciodată direct cu el, 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 revizui paginile de manual cron și crontab, deoarece multe distribuții folosesc versiuni corectate ale acestora pentru a ajuta o mai bună integrare programe pentru 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 nu este 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 lui adresa poștală implicit ($utilizator@$nume gazdă). Dacă doriți să vă schimbați adresa E-mail, doar 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 simplu și sarcini banale, doar ca să ne încălzim, iar acum ne apucăm de 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 postări similare cu cele pe care le-am făcut mai devreme, dar comenzi executabile va fi diferit. „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:

MIN HOUR DOM LUN DOW CMD

Tabel: câmpuri Crontab și intervale valide (sintaxă Linux Cron fila)

1. Programarea sarcinilor pentru un anumit timp

Baza utilizării cron este efectuarea sarcinilor în anumit timp 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 utilizează o copie de rezervă suplimentară 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 altuia 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.

Exista conditii speciale, când în loc de 5 câmpuri puteți folosi @ și apoi 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 se va executa comanda specificată de fiecare dată după pornirea sistemului.

@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ă. Deoarece unitate minimă execuție cron – 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 indicat 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 din 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 de editare directă fișier crontab puteți adăuga toate intrările la 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

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,acordați des scripturi executabile pentru a scrie jurnalul î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 centru 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!

Foarte des, pe sisteme asemănătoare Linux, poate fi necesar să automatizați unele procese de rutină. Pentru aceasta se folosesc programatoare speciale. Una dintre cele mai faimoase dintre ele este Cron, ale cărui setări vor fi discutate în acest articol.

Ce este Cron?

Numele programului este derivat din grecescul „chronos”, adică timp. Ceea ce este de fapt logic. Sarcina demonului este să execute comenzile scrise lui în anumite momente. Procesul de implementare în sine se bazează pe verificarea tabelelor coroanei și pe compararea acestora cu și timpul.

fișier crontab

Cel mai important element al înființării Cron este Fișier de configurare crontab. Conține comenzi de execuție și căi către scripturi. Toate rulează ca superutilizator. Deoarece sunt localizate în directorul /etc/cron.d, aceste fișiere ar trebui să fie configurate acolo.

Pentru fiecare utilizator individual Sistemul folosește propriul fișier crontab.

Diferite distribuții Linux folosesc directoare diferite pentru stocare setari personalizate. Pentru RedHat aceasta este var / bobină/cron. Pe Debian și Ubuntu, acesta va fi var/spool/cron/crontabs. Și var/spool/cron/tabs în SUSE.

Lista de comenzi pentru gestionarea crontab

Cron are un set de directive speciale care pot fi folosite pentru a controla planificatorul. Ele trebuie utilizate împreună cu crontab. Iată o mică listă:

  • -u nume de utilizator. Setează utilizatorul ale cărui sarcini și setări vor fi procesate actiunile urmatoare. Dacă omiteți cheia dată, utilizatorul implicit va fi setat.
  • -l. Afișează lista curentă de sarcini.
  • -e. Lansează editorul pentru planificatorul de activități.
  • -r. Elimină toate sarcinile existente din listă.

Format de sarcină

După cum am menționat mai sus, configurarea Cron constă în specificarea comenzilor în dosar special. Arată ca simpla intrare, format din șase coloane:

  • primul indică numărul de minute. Intervalul disponibil este de la 0 la 59. Puteți utiliza mai multe valori, interval și Simboluri speciale;
  • a doua coloană - ore. Pot fi utilizate valori de la 0 la 23;
  • ziua urmatoare. Aici puteți specifica un număr de la 1 la 31;
  • a patra este o lună. Valoarea minima 1, maxim - 12;
  • a cincea - săptămână. 0 sau 7 corespunde duminicii;
  • Ultima comandă este comanda în sine.

După cum sa menționat, puteți specifica caractere speciale, „*” sau „/” în fișier. De exemplu, o astfel de intrare este 23 */2 *** echo „Run” înseamnă că la fiecare oră și 23 de minute va fi afișată inscripția „Run”.

Caracteristicile fișierului crontab

Când configurați Cron, trebuie să vă amintiți că are proprietăți specifice care ar trebui să fie luate în considerare la configurare:

  • fiecare fișier trebuie să se încheie linie goală, altfel ultimul paragraf poate fi ignorat, iar uneori întregul fișier;
  • fișierele aflate în directoare cu un punct în numele lor vor fi, de asemenea, ignorate de planificator;
  • Puteți utiliza simbolurile lire sterline „#” în fișierele de configurare. Sunt folosite pentru a marca linii cu comentarii. Acest lucru este foarte util pentru descrierea sarcinilor și comenzilor programate.

Variabile suplimentare

Când configurați Cron, îl puteți utiliza în comenzi sensuri speciale si reduceri. De exemplu, puteți utiliza următoarea listă pentru a specifica ziua săptămânii:

  • soare - duminica;
  • mon - luni;
  • marţi - marţi;
  • miercuri - mediu;
  • thu - joi;
  • vineri - vineri;
  • sat - sâmbătă.

Există, de asemenea, valori separate pentru litere pentru luni - jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.

Există, de asemenea, variabile separate pentru configurarea Cron care pot înlocui linii de comandă întregi:

  • @reboot. Comanda va rula de fiecare dată când porniți computerul;
  • @anual. Aceasta sarcina va fi lansat o dată pe an. Notația sa echivalentă în formă numerică ar putea fi: 0 0 1 1 *. Sinonimul său poate fi scris și ca @anual;
  • @lunar. După cum puteți ghici din nume, această variabilă rulează comanda o dată pe lună. Analogul său numeric este 0 0 1 * *;
  • @săptămânal. Această variabilă va rula în fiecare săptămână;
  • @zilnic. O data pe zi;
  • @miezul nopţii. Lansarea va avea loc la miezul nopții;
  • @la oră. În fiecare oră.

Configurarea Cron pe Centos 7

Procesul de instalare și configurare în sine nu este mult diferit de altele similare distribuții Linux. Înainte de a configura Cron pe Centos, trebuie să instalați pachetul Cronie pe sistemul dumneavoastră. Puteți face acest lucru folosind comanda yum install cronie. Pentru a crea un fișier cu instrucțiuni, trebuie să rulați crontab -e în terminal. Toate setarile sistemului Fișierele Cron vor fi stocate la /var/spool/cron/username.

Câteva exemple utile pentru crearea sarcinilor repetate frecvent

Cron poate fi configurat pentru a acoperi aproape toate nevoile oricărui utilizator.

  • 00 09-17 * * 1 - 5 /cale/ către echipă/ coroană. Această comandă va efectua automat acțiunea programată în fiecare zi lucrătoare de la 9 la 5 la fiecare prim minut;
  • 00 9.17 * * * /cale/ către echipă/ coroană. În acest exemplu, comanda este executată de două ori pe zi. Primul este la 9, al doilea este la ora 5. Semnul „*” indică faptul că comanda va fi executată în fiecare zi, lună și an;
  • De asemenea, nu uitați de variabilele simbolice. De exemplu, @monthly va rula sarcina în fiecare lună în primul minut din prima oră a primei zile. Și @dayly va fi lansat în fiecare zi.