Crontab e exemple. Cron - lansează programele utilizatorului la un moment specificat

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 utilizatorul obișnuit nu va lucra niciodată direct cu acesta, sistemul și multe aplicații folosesc cron (un exemplu bun este actualizarea periodică a bazei de date a paginii 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. În orice caz, nu este nimic mai bun decât citirea paginilor de manual, mai ales dacă ai de-a face cu un program nou pe care îl vei folosi 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 (dialogul ș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 wildcards înainte, 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, oră, ziua lunii, luna, ziua săptămânii, anul (opțional) și comanda de 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, pur și simplu utilizați 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. Titlul acestei secțiuni 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 se aplică î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ă administratorul de sistem este conștient de securitate și adaugă utilizatori. și grupează î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 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 în sistem implicit, 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:

În sistemul de operare Unix, este posibil să lansați programe de utilizator la un moment specificat de utilizator. Pentru a face acest lucru, se folosește programul cron, care primește instrucțiuni de la utilizatori și, urmându-le, efectuează orice sarcini conform scripturilor primite. Clienții noștri pot folosi această funcție pentru a efectua sarcini periodice.

Cum să configurați cron în contul personal (pentru tarifele Unix)

Deoarece nu toate programele PHP pot rula prin SAPI CLI fără modificare prealabilă, le puteți rula wget. De exemplu:

/usr/local/bin/wget -O /dev/null -q http://mysite.tld/cron.php?action=123

Dacă scriptul folosește funcții cere, include, și conțin căi relative, apoi la începutul scriptului care se execută, utilizați un apel de funcție chdir(), care va seta directorul de lucru curent.

Cum să primiți mesaje de eroare de la programele rulate de cron

Dacă întâmpinați erori în timpul executării unui program care rulează din cron, probabil că veți dori să primiți mesaje de eroare, astfel încât să puteți monitoriza pe deplin performanța joburilor care rulează periodic. Pentru a face acest lucru, plasați următoarea linie la începutul scriptului cron:

MAILTO=adresă@domeniu.ru

Cu siguranță, [email protected] trebuie să o înlocuiți cu o adresă de e-mail reală la care vor fi livrate notificările. Dacă trebuie să primiți mesaje de eroare la mai multe adrese, specificați toate aceste adrese separate prin virgulă.

Vă rugăm să rețineți că cron va trimite prin poștă ceea ce scot scripturile care rulează. De exemplu, dacă scrieți un script care tipărește linia „Hello, world” și îl rulați prin cron, veți primi un e-mail cu linia „Hello, world” de fiecare dată când cron rulează un astfel de script.

Pentru a evita acest lucru, de exemplu, atunci când nu aveți nevoie de textul rezultat din script, trebuie să adăugați caracterele

> /dev/null 2>&1

Linia completă pentru cron va arăta astfel:

0 1 * * * /usr/local/bin/php -q $HOME/script.php > /dev/null 2>&1

Vă recomandăm să verificați sintaxa corectă a scripturilor pe care le-ați setat să le ruleze prin cron. Scripturile pot conține o eroare, pot să nu funcționeze la fel atunci când sunt rulate printr-un server web și prin cron și așa mai departe. Pentru a vă asigura că scriptul va funcționa corect prin cron, mai întâi verificați-l cu următoarea comandă în shell-ul Unix:

/usr/local/bin/php -l script.php

Dacă nu există erori în script, veți vedea mesajul „Nu au fost detectate erori de sintaxă în script.php”.

Restricții

Pentru programele care sunt lansate prin cron, se aplică aceleași restricții privind resursele consumate ca și pentru procesele lansate de utilizator în shell-ul Unix. Vorbim despre restricții privind timpul de execuție al programului, cantitatea de memorie disponibilă, restricții privind dimensiunea fișierului și așa mai departe.

Cron este un programator de sarcini care rulează pe Unix\Linux hosting. Vă permite să efectuați automat anumite acțiuni pe server (lansare de programe, scripturi etc.), cu o oră sau o frecvență specificată.

Configurarea corectă a programatorului de joburi Cron

Joburile pentru Cron pot fi descrise după cum urmează - acestea sunt mai multe linii (o linie - un job), care indică frecvența de lansare și comanda (ceea ce înseamnă ce trebuie de fapt lansat):

30 3 * * 2 /yourdirectory/myscript.pl

Schematic:

Minute Ore ZiLună Lună Zi Săptămână Comanda

minute- setat de un număr de la 0 la 59

Ceas- setat cu un număr de la 0 la 23

Ziua lunii- setat de un număr de la 1 la 31

Lună- setat de un număr de la 1 la 12

Zi a săptămânii- 1 - Luni, 2 - Marți, 3 - Miercuri, 4 - Joi, 5 - Vineri, 6 - Sâmbătă, 7 - Duminică

Astfel, în exemplul nostru (30 3 * * 2 /yourdirectory/myscript.pl) înapoi înseamnă că trebuie să rulați fișierul /yourdirectory/myscript.pl în fiecare marți la 3:30 am

De asemenea, în fiecare dintre domenii putem folosi:

Scriere despărțită prin virgule: 2,5,16 - dacă scrieți acest lucru în câmpul Ore, sarcina se va desfășura la 2 am, 5 am și 4 pm.

Interval: 5-9 - dacă scrieți acest lucru în câmpul Minutes, sarcina se va rula în fiecare minut în perioada de la 5 la 9 minute.

Frecvență suplimentară: /4 - daca scrieti asta in campul ore, va insemna ca lansarea va avea loc la fiecare 4 ore.

Important! Un asterisc (*) înseamnă toate valorile posibile! Astfel, un webmaster neexperimentat care decide că pentru a rula o sarcină pe 1 a fiecărei luni este suficient să scrie * * 1 * * /yourdirectory/myscript.pl dă peste faptul că sarcina va fi lansată în fiecare minut, în fiecare oră.

Cum și unde să introduceți joburile Cron?

Prima modalitate de a lucra cu Cron este prin intermediul panoului de control al găzduirii. Dar în diferite panouri, configurarea și gestionarea sunt efectuate diferit:

cPanel: Panou de control -> Lucrări Cron

Manager ISP: Panou de control -> Programator (Cron)

Parallels Plesk: Panou de control -> Sarcini programate

Dacă furnizorul dvs. de găzduire nu are capacitatea de a lucra cu locuri de muncă prin panoul de control, atunci toate lucrările cu Cron se fac de obicei prin protocolul SSH. Totul este simplu aici - conectați-vă la server prin SSH și introduceți comenzi. Pentru a vă conecta la server, utilizați programul PuTTY gratuit (cum să îl configurați) și introduceți comenzile pe linia de comandă.

Pentru a începe, introduceți comanda

După aceasta, cel mai probabil vei fi transferat la editorul de text vi (diferiți furnizori pot avea editoare diferite). vi este un editor destul de complex, așa că vă recomandăm să încercați să introduceți linia

Dacă pornește un editor mai ușor, atunci totul este în regulă, dar dacă furnizorul tău de găzduire nu îl acceptă, atunci Google vă va ajuta să vă dați seama cu vi. Vom sublinia doar pe scurt punctele principale:

Introducerea textului- apăsați tasta i și editorul va comuta în modul de introducere a textului;

ieși din modul de introducere a textului- Esc

Șterge caracterul- x (dacă sunteți în modul de introducere test, atunci pentru a șterge un caracter, apăsați mai întâi Esc și apoi x);

Important! Când introduceți joburi pentru Cron, trebuie să apăsați Enter după fiecare linie, chiar dacă aceasta este singura linie.

Pentru a vizualiza joburile Cron existente, introduceți crontab -l

Joburi Cron cu exemple utile

Consultați regulile pentru crearea de locuri de muncă Cron. Rulați o sarcină la fiecare 2 ore la 0 minute (în fiecare zi, în fiecare lună)

0 */2 * * * /yourdirectory/myscript.pl

Rulați sarcina de fiecare dată după repornirea serverului

@reboot/yourdirectory/myscript.pl

Rulați sarcina miercurea la ora 3:20 (în fiecare zi, în fiecare lună)

20 3 * * 3 /yourdirectory/myscript.pl
1 0 14 3 * /yourdirectory/myscript.pl

Rulați sarcina lunar pe 1 la ora 3:15 (în fiecare lună)

15 3 1 * * /yourdirectory/myscript.pl

Rulați fișiere PHP într-un program folosind Cron

Pentru a rula scripturi PHP prin Cron, puteți utiliza un interpret special. Din păcate, nu vă putem oferi instrucțiuni despre cum să-l utilizați, deoarece... Diferiți furnizori pot utiliza software diferit. Prin urmare, mulți webmasteri lansează fișiere PHP folosind WGET, pentru aceasta folosim următoarea intrare crontab:

30 3 * * 2 root wget -O - -q -t 1 http://mysite.com/file.php

„-O -” înseamnă că Cron nu va crea fișiere inutile, ci va funcționa prin consolă. Acest lucru vă permite să evitați aglomerarea serverului.

„-q” dezactivează imprimarea operației pe ecran

„-t 1” permite doar o singură încercare de conectare.

http://mysite.com/file.php - calea către fișierul dvs. PHP (nu este necesar să specificați o cale absolută).

Important! Dacă treceți parametri folosind acest fișier PHP, există momente în care WGET nu îi procesează corect. În acest caz, vă recomandăm să includeți adresa fișierului PHP între ghilimele simple:

30 3 * * 2 root wget -O - -q -t 1 "http://mysite.com/file.php"

De asemenea, există o altă modalitate de a începe:

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php

Dar, în acest caz, trebuie să cunoașteți calea către folderul wget de pe serverul dvs. (cel mai adesea /usr/bin/wget sau /usr/local/bin/wget).

Primiți un raport de lucru Cron prin e-mail

Cron poate fi configurat să trimită e-mailuri cu rezultatele executării joburilor. Această caracteristică poate fi utilă și pentru notificarea în cazul unei erori. Pentru a primi un raport prin e-mail, trebuie să editați crontab (înainte de sarcini) și să scrieți următorul rând:

Unde [email protected]- acesta este e-mailul la care vor fi trimise scrisorile. De asemenea, puteți adăuga mai multe adrese, separate prin virgule.

Mai este un lucru: veți primi și rezultatul scriptului prin e-mail. de exemplu, dacă scenariul scrie un fel de inscripție pe ecran, atunci aceeași inscripție va fi trimisă la e-mailul tău împreună cu raportul. Dacă acest lucru vă enervează, adăugați linia > /dev/null 2>&1 la sfârșitul sarcinii

30 3 * * 2 /usr/bin/wget -O - -q -t 1 http://mysite.com/file.php > /dev/null 2>&1

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 comenzile.

Nu ar trebui să fie probleme cu adresa la script (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, atribuirea 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: instaling new 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.

Î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 rulează și trimite mesaje de e-mail utilizatorilor care le-au programat să ruleze.

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 specifică ora la care va rula 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 zi a 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 cu 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ă a valorilor 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 lu. Rulați jobul la prânz în fiecare luni din ianuarie a fiecărui an 0 12 2 feb * Rulați jobul 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 (într-un editor de text familiar) 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. Odată ce fișierul specificat este creat, conținutul acestuia trebuie scris în fișierul crontab cu comanda:

~$ crontab cronjobs

Conținutul fișierului cronjobs va înlocui complet conținutul fișierului crontab al utilizatorului. 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- un instrument puternic, deși complex, popular printre utilizatorii 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 standard îș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.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva