Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
Roxxxi23
Femeie
23 ani
Neamt
cauta Barbat
23 - 52 ani
Mihai Sprinceana / SO Linux&Unix / utilizare crontab si cron deamon pentru planificarea unor task-uri Moderat de Cristy89, Houssey, cr3us, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
daniel
Moderator

Inregistrat: acum 16 ani
Postari: 6
Pentru a putea executa scriptul la un anumit moment din timp vom apela la crondeamon (crond) si la facilitățile pe care acesta le oferă.
crond este daemonul care rulează in fundal in sistemele UNIX si asemănătoare, si verifica in continuu lista de procese care trebuie rulate la o anumita data/ora. Principalul fișier de configurare este /etc/crontab in care sunt specificate programele care trebuie executate la o anumita ora, intr-o anumita data.
   De exemplu, daca se deschide /etc/crontab cu un editor de texte simplu vom găsi probabil mai multe linii printre care si câteva asemănătoare cu cele de mai jos:
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/
    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
Primele patru rânduri setează niște variabile care sunt folosite de crond la rulare. Variabilele respective (mai puțin MAILTO) se găsesc in orice cont pe un sistem UNIX.
SHELL este interpretorul folosit de crond la rularea aplicațiilor.
PATH este variabila care păstrează calea in care se poate găsi aplicația care trebuie rulata. Daca se specifica app ca aplicație, aceasta va fi căutata in toate directoarele din variabila PATH. Directoarele sunt specificate cu calea absoluta (începând in /) si sunt separate de semnul ‘:’. Daca aplicația nu este găsita in unul din directoarele specificate va trebui data calea absoluta a aplicației sau va trebui adăugat directorul aplicației in variabila PATH.
MAILTO trebuie sa conțină un cont de pe sistemul local sau o adresa de mail. După rulare unele scripturi pot afișa texte, mesaje de eroare sau confirmare a rulării. Aceste texte de ieșire sunt trimise automat pe mail la contul specificat in MAILTO.
HOME este homedir al utilizatorului sub care rulează crond. In general nu e necesara variabila aceasta, dar sunt unele programe care o cer, deci e bine sa aibă o valoare ( / ).
            Daca ne uitam in a doua parte a fișierului /etc/crontab vedem o lista de “chestii” separate de spatii (sau TAB). De fapt sunt șapte câmpuri diferite, fiecare cu un scop bine determinat. Fiecare câmp trebuie sa fie prezent. Primele 5 câmpuri spun daemon-ului când trebuie rulata o anumita aplicație. Al șaselea câmp specifica ușerul care trebuie sa execute aplicația respectiva. Al șaptelea câmp e comanda care trebuie executata.
Data si câmpurile sunt organizate după cum urmează:
1. minutul - minutul din ora la care va fi rulata aplicația;
2. ora - ora din zi la care va fi rulata aplicația;
3. ziua (din luna) - in ce zi din luna va fi rulata aplicația;
4. luna - luna in care va fi rulata aplicația;
5. zi (din săptămâna) - in ce zi din săptămâna va fi rulata aplicația.
    După cum se poate vedea, avem o flexibilitate destul de mare in specificarea perioadei in care va fi rulata aplicația. Putem specifica fiecare termen din cei 5 sau putem pune un asterisc ( * ) pentru a specifica faptul ca aplicația trebuie rulata la fiecare minut / zi / ora / luna in funcție de câmpul in care îl plasam.

          3.1 Exemple de utilizare a crondeamon-ului

       1)  Luam unul din exemplele de mai sus sa îl studiem:
Code:
    01 * * * * root run-parts /etc/cron.hourly
      Primul element e 01 iar următorii 4 sunt marcați cu asterisc. Luandu-ne după ce am spus mai sus, asta înseamnă ca aplicația specificata ( run-parts /etc/cron.hourly ) va fi rulata in minutul 01 la fiecărei ore, in fiecare zi a lunii si a săptămânii, in fiecare luna. De ce ? Pentru ca singura condiție e sa fie minutul 01.
       2) Code     
     02 4 * * * root run-parts /etc/cron.daily
     Un alt exemplu. Vedem ca primul element e 02, al doilea 4, iar următoarele elemente care specifica data/ora sunt asteriscuri. Asta înseamnă ca aplicația ( run-parts /etc/cron.daily ) va fi rulata in minutul 02, la ora 4 in fiecare zi. Va fi rulata doar o data pe zi, pentru ca o singura data pe zi se îndeplinește condiția (ora 4 - nu ora 16).
       3) Code:
     22 4 * * 0 root run-parts /etc/cron.weekly
   Aici treburile devin puțin mai interesante. Se specifica minutul (deci va fi rulat o singura data pe ora), se specifica ora (deci se va rula o singura data pe zi) si se specifica ziua săptămânii. Asta înseamnă ca in perioada de 7 zile, scriptul va fi rulat o singura data. Ziua săptămânii e marcata cu 0. Ziua 0, e Duminica. Tot pentru Duminica se folosește si 7.
        7) Code:
      42 4 1 * * root run-parts /etc/cron.monthly
   Ultimul exemplu. Un script care e rulat la minutul 42, ora 4, in data de 1 a fiecărei luni. Daca s-a specificat ziua lunii, s-a pus o condiție in plus care e îndeplinita doar o data pe luna. Deci, scriptul va fi rulat doar o data pe luna.

   3.2 Programarea executării unui script
     Se poate programa o aplicație sa fie rulata când dorim noi. Sa presupunem ca am vrea ca scriptul respectiv sa fie rulat zilnic la o anumita ora de exemplu 7.30. Ca sa facem treaba funcționala, adăugam o linie in /etc/crontab care arata de forma:
30 7 * * * root appname
Ca peste tot in UNIX, programatorii se gândesc la utilizator si încearcă sa-i facă treaba cat mai ușoara. Liniile care se găsesc ca default in crontab (cele din exemplu) nu sunt puse la întâmplare. De fapt, run-parts este o aplicație care este rulata pe aproape orice sistem UNIX. Ideea a fost implementata pentru prima oara in Debian. run-parts e un script shell care primește ca parametru un director. La rulare, executa fiecare aplicație/script din directorul specificat. După cum se vede in liniile care sunt acolo ca default, aplicația run-parts este apelata la fiecare ora cu directorul /etc/cron.hourly, o data pe zi cu directorul /etc/cron.daily, in fiecare zi a săptămânii cu directorul /etc/cron.weekly si o data pe luna cu directorul /etc/cron.monthly. Asta înseamnă ca noi putem pune orice executabil in unul din directoarele astea si acesta va fi rulat in funcție de directorul in care îl punem. Daca punem un script in /etc/cron.hourly, acesta va fi rulat in fiecare ora. La fel si pentru celelalte directoare.
In sistemele multi-user fiecare utilizator are un fișier al lui in care se păstrează cron-urile. Locația depinde de sistemul de operare folosit, dar in majoritatea cazurilor e un subdirector din /var - de exemplu, /var/spool/cron/nume_utilizator in CentOS. Utilizarea se face după cum urmează:
In primul rând e necesar ca utilizatorul sa aibă un editor setat ca default. Se poate verifica daca exista prin utilizarea comenzii:
echo $EDITOR
Daca nu e setat nici un editor, setați vi (sau oricare va place) ca editor folosind comanda
export EDITOR=vi
in bash. Acum trebuie sa editam fesierul pentru cron. Asta se face cu ajutorul comenzii crontab-e. Când rulam comanda  se deschide editorul setat si scriem data, ora si aplicația exact ca in /etc/crontab. Apoi salvam si ieșim, iar editorul va salva tot ce am pus in fesierul cron al user-ului. Ca sa verificam daca e totul in regula, putem folosi crontab -l:
    [~]# crontab -l
    10 1 1 * * root wget
    [~]#
Ca sa curtam lista de cron-uri folosim crontabl -r.
    Ca root se poate restricționa accesul la crond. crond verifica in continuu fișierele /etc/cron.allow si /etc/cron.deny pentru a vedea daca user-ul sub care urmează sa fie rulata o aplicație are dreptul sa ruleze. Daca vrem sa tăiem accesul la cron utilizatorului x-ulescu, ii trecem numele in /etc/cron.deny in ideea in care politica e “toata lumea poate rula in afara de user-ii specificați”.
Se poate aplica o alta politica si anume “nimeni nu rulează cron in afara de user-ii specificați” caz in care in /etc/cron.deny se trece o singura linie si anume ALL. Asta înseamnă ca nimeni nu are dreptul sa ruleze procese prin cron, excepție făcând user-ii care vor fi puși in fesierul /etc/cron.allow.


pus acum 14 ani
   
Pagini: 1  

Mergi la