CRONTAB(5) Formate de fiiere CRONTAB(5) NUME crontab - fiiere utilizate pentru programarea execuiei programelor DESCRIERE Un fiier crontab conine instruciuni pentru demonul cron(8) in urmatoarea maniera simplificata: ,,executa aceasta comanda la aceasta ora la aceasta data". Fiecare utilizator ii poate defini propriul fiier crontab. Comenzile definite in orice fiier crontab dat sunt executate de catre utilizatorul care deine fiierul crontab respectiv. Uucp i News au de obicei propriile fiiere crontab, eliminand necesitatea de a executa in mod explicit su(1) ca parte a unei comenzi <>. Liniile goale, spaiile iniiale i tabulatoarele sunt ignorate. Liniile al caror prim caracter care nu este spaiu alb este semnul lirei (#) sunt comentarii i nu sunt procesate. Reinei ca comentariile nu sunt permise pe aceeai linie cu comenzile cron, deoarece sunt considerate parte a comenzii. In mod similar, comentariile nu sunt permise pe aceeai linie cu valorile variabilelor de mediu. O linie activa intr-un crontab este fie o opiune de mediu, fie o comanda cron. O opiune de mediu este de forma: nume = valoare unde spaiile albe din jurul semnului egal (=) sunt opionale, iar orice spaii albe ulterioare care nu preceda valoarea fac parte din valoarea atribuita lui nume. irul valoare poate fi plasat intre ghilimele (simple sau duble, dar identice) pentru a pastra spaiile albe anterioare sau posterioare. Mai multe variabile de mediu sunt configurate automat de catre demonul cron(8). Variabila SHELL este definita la ,,/bin/sh", iar variabilele LOGNAME i HOME sunt definite din linia ,,/etc/passwd" a proprietarului fiierului crontab. Variabilele HOME i SHELL pot fi inlocuite de configurarile din crontab; variabila LOGNAME nu poate fi inlocuita. (Nota: variabila LOGNAME este uneori numita USER pe sistemele BSD i este, de asemenea, definita automat). In plus faa de LOGNAME, HOME i SHELL, cron(8) analizeaza variabila MAILTO daca trebuie trimis un mesaj ca urmare a executarii oricarei comenzi din fiierul crontab respectiv. Daca variabila MAILTO este definita (i nu este goala), mesajul este trimis la adresa specificata. Daca MAILTO este definita, dar goala (MAILTO=,,"), nu se trimite niciun mesaj. In caz contrar, mesajul este trimis catre proprietarul fiierului crontab. Aceasta opiune este utila daca decidei sa utilizai ,,/bin/mail" in loc de ,,/usr/lib/sendmail" ca agent de pota electronica. Reinei ca ,,/bin/mail" nu ofera suport pentru crearea de nume-alias i UUCP nu citete de obicei corespondena sa. Daca MAILFROM este definita (i nu este goala), aceasta este utilizata ca adresa a expeditorului plicului, in caz contrar, este utilizat numele de utilizator al utilizatorului care executa. Aceasta variabila este motenita i din mediul procesului crond. Nota: Atat variabilele MAILFROM, cat i MAILTO sunt expandate, astfel incat definirea lor ca in exemplul urmator funcioneaza conform ateptarilor: MAILFROM=cron-$USER@cron.com ($USER este inlocuit cu utilizatorul de sistem) In mod implicit, cron trimite un mesaj folosind antetul ,,Content-Type:" ,,text/plain" cu parametrul ,,charset=" definit la codificarea ,,charmap/codeset" a configuraiei regionale in care crond(8) este pornit, adica fie configuraia regionala implicita a sistemului, daca nu sunt definite variabilele de mediu LC_*, fie configuraia regionala specificata de variabilele de mediu LC_* (a se vedea locale(7)). Diferite codificari de caractere pot fi utilizate pentru trimiterea prin pota electronica a rezultatelor sarcinilor cron prin definirea variabilelor CONTENT_TYPE i CONTENT_TRANSFER_ENCODING intr- un fiier crontab la valorile corecte ale antetelor de pota electronica ale acestor nume. Variabila CRON_TZ specifica fusul orar specific pentru tabelul cron. Utilizatorul trebuie sa introduca in tabel o ora in conformitate cu fusul orar specificat. Ora utilizata pentru scrierea intr-un fiier jurnal este preluata din fusul orar local, in care ruleaza demonul. Variabila de mediu MLS_LEVEL ofera suport pentru mai multe contexte de securitate SELinux per-sarcina in acelai fiier crontab. In mod implicit, sarcinile cron se executa cu contextul de securitate SELinux implicit al utilizatorului care a creat fiierul crontab. Atunci cand se utilizeaza mai multe niveluri de securitate i roluri, acest lucru poate sa nu fie suficient, deoarece acelai utilizator poate rula in roluri diferite sau in niveluri de securitate diferite. Pentru mai multe informaii despre roluri i SELinux MLS/MCS, consultai selinux(8) i exemplul de fiier crontab menionat mai departe in acest text. Putei defini variabila MLS_LEVEL la irul contextului de securitate SELinux, specificand contextul de securitate SELinux particular in care dorii ca sarcinile sa fie executate. crond va stabili apoi contextul de execuie al acelor lucrari care indeplinesc specificaiile contextului de securitate particular. Pentru mai multe informaii, consultai opiunea <>. Variabila RANDOM_DELAY permite intarzierea lansarii sarcinilor cu un numar aleatoriu de minute, cu limita superioara specificata de variabila. Factorul de scalare aleatoriu este determinat in timpul pornirii demonului cron, astfel incat ramane constant pe intreaga durata de funcionare a demonului. Formatul unei comenzi cron este similar cu standardul V7, cu o serie de extensii compatibile cu versiunile ulterioare.. Fiecare linie are cinci campuri de ora i data, urmate de un nume de utilizator (daca acesta este fiierul crontab al sistemului) i urmate de o comanda. Comenzile sunt executate de cron(8) atunci cand campurile ,,minute", ,,ora" i ,,luna din an" corespund orei curente, i cel puin unul dintre cele doua campuri ,,ziua" (,,ziua din luna" sau ,,ziua din saptamana") corespund orei curente (a se vedea <> de mai jos). Reinei ca acest lucru inseamna ca orele inexistente, cum ar fi ,,orele lipsa" din timpul conversiei la ora de vara, nu se vor potrivi niciodata, ceea ce va determina neefectuarea lucrarilor programate in timpul ,,orelor lipsa". In mod similar, orele care apar de mai multe ori (din nou, in timpul conversiei la ora de vara) vor determina executarea de doua ori a lucrarilor corespondente. cron(8) examineaza intrarile cron la fiecare minut. Campurile de ora i data sunt: field allowed values ----- -------------- minute 0-59 ora 0-23 ziua din luna 1-31 luna 1-12 (sau nume, a se vedea mai jos) ziua din saptamana0-7 (0 sau 7 este duminica, sau folosii nume) Un camp poate conine un asterisc (*), care inseamna intotdeauna ,,primul-ultimul". Sunt permise intervalele de numere. Intervalele sunt formate din doua numere separate cu o cratima. Intervalul specificat este inclusiv. De exemplu, 8-11 pentru o intrare ,,ore" specifica executarea la orele 8, 9, 10 i 11. Primul numar trebuie sa fie mai mic sau egal cu al doilea. Se poate utiliza randomizarea timpului de execuie in cadrul unui interval. Se alege un numar aleatoriu intr-un interval specificat ca doua numere separate prin tilda. Intervalul specificat este inclusiv. De exemplu, 6~15 pentru o intrare ,,minute" selecteaza un minut aleatoriu in intervalul 6-15. Numarul aleatoriu este ales atunci cand fiierul crontab este analizat. Primul numar trebuie sa fie mai mic sau egal cu cel de-al doilea.Putei omite unul sau ambele numere care specifica intervalul. De exemplu, ~ pentru o intrare ,,minute" alege un minut aleatoriu in intervalul 0 - 59. Listele sunt permise. O lista este un set de numere (sau intervale) separate prin virgula. Exemple: ,,1,2,5,9", ,,0-4,8-12". Valorile pas cu pas pot fi utilizate impreuna cu intervalele. Urmarea unui interval cu un ,,/" specifica salturi ale valorii numarului prin interval. De exemplu, ,,0-23/2" poate fi utilizat in campul ,,ore" pentru a specifica executarea comenzii la fiecare doua ore (alternativa din standardul V7 este ,,0,2,4,6,8,10,12,14,16,18,20,22"). Valorile pas cu pas sunt, de asemenea, permise dupa un asterisc, astfel incat, daca specificai o sarcina care sa fie executata la fiecare doua ore, putei utiliza ,,*/2". Va rugam sa reinei ca paii sunt evaluai doar in cadrul campului la care sunt aplicai. De exemplu, ,,*/23" in campul ore inseamna executarea sarcinii la ora 0 i la ora 23 intr-o zi calendaristica. Consultai seciunea ,,NOTE" de mai jos pentru o soluie. Numele pot fi utilizate i pentru campurile ,,luna" i ,,ziua din saptamana". Utilizai primele trei litere ale numelui zilei sau lunii respective (in engleza; nu conteaza minuscule/majusculele). Sunt permise intervalele i listele de nume. Exemple: ,,mon,wed,fri", ,,jan-mar". Daca UID-ul proprietarului este 0 (root), primul caracter al unei intrari crontab poate fi caracterul ,,-". Acest lucru va impiedica cron sa scrie un mesaj syslog cu privire la comanda care se executa. Al ,,aselea" camp (restul liniei) specifica comanda care urmeaza sa fie executata. Intreaga poriune de comanda din linie, pana la o linie noua sau un caracter ,,%", va fi executata de ,,/bin/sh" sau de shell-ul specificat in variabila SHELL din fiierul <>. Un caracter ,,%" din comanda, cu excepia cazului in care este eludat cu o bara oblica inversa (\), va fi transformat in caractere de linie noua, iar toate datele dupa primul % vor fi trimise la comanda ca intrare standard. Nota: Ziua de execuie a unei comenzi poate fi specificata in urmatoarele doua campuri -- ,,ziua din luna", i ,,ziua din saptamana". Daca ambele campuri sunt restricionate (adica nu conin caracterul ,,*"), comanda va fi executata atunci cand oricare dintre campuri corespunde orei curente. De exemplu, ,,30 4 1,15 * 5" ar face ca o comanda sa fie executata la ora 4:30 in zilele de 1 i 15 ale fiecarei luni, plus in fiecare vineri. Sintaxa unui fiier crontab poate fi testata inainte de instalare cu ajutorul opiunii ,,-T". Consultai crontab(1) pentru detalii. EXEMPLU DE FIIER CRON # utilizeaza /bin/sh pentru a rula comenzi, indiferent de ceea ce spune /etc/passwd SHELL=/bin/sh # trimite orice ieire catre ,,paul", indiferent al cui fiier crontab este acesta MAILTO=paul # CRON_TZ=Japan # ruleaza in fiecare zi la cinci minute dupa miezul nopii 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # ruleaza la 2:15pm in prima zi a fiecarei luni - ieirea trimisa la paul 15 14 1 * * $HOME/bin/monthly # ruleaza la ora 10 pm in zilele lucratoare, enervand-ul pe Joe 0 22 * * 1-5 mail -s "Este ora 10 pm" joe%Joe,%%unde sunt copiii tai?% 23 0-23/2 * * * echo "ruleaza 23 de minute dupa miezul nopii, 2am, 4am ..., in fiecare zi" 5 4 * * sun echo "ruleaza la 5 minute dupa ora 4 in fiecare duminica" Sarcini in /etc/cron.d/ Sarcinile din cron.d i /etc/crontab sunt sarcini de sistem, care sunt utilizate de obicei pentru mai muli utilizatori, prin urmare, este necesar in plus numele de utilizator. ,,MAILTO" de pe prima linie este opional. EXEMPLU DE O SARCINA IN ,,/etc/cron.d/job" #autentificai-va ca root #creai o sarcina de lucru cu editorul preferat (de exemplu, vim) MAILTO=root * * * * * root touch /tmp/fiier NOTE Dupa cum s-a menionat mai sus, valorile de salt funcioneaza numai in cadrul perioadei de timp la care sunt ataate. De exemplu, specificarea ,,0/35" pentru campul minute al unei intrari crontab nu va face ca acea intrare sa fie executata la fiecare 35 de minute; in schimb, va fi executata de doua ori in fiecare ora, la 0 i 35 de minute. Pentru un control mai fin, putei face ceva similar cu aceasta: * * * * * if [ $(expr \( $(date +%s) / 60 \) % 58) = 0 ]; then echo ruleaza la fiecare 58 de minute; fi 0 * * * * if [ $(expr \( $(date +%s) / 3600 \) % 23) = 0 ]; then echo ruleaza la fiecare 23 de ore; fi Ajustai dupa cum este necesar daca comanda date(1) nu accepta ,,+%s" ca specificator al irului de format pentru a afia marcajul de timp UNIX curent. SELinux cu securitate pe mai multe niveluri (MLS) Intr-un fiier crontab, este important sa specificai un nivel de securitate prin crontab -s sau specificand nivelul necesar pe prima linie a fiierului crontab. Fiecare nivel este specificat in /etc/selinux/targeted/seusers. Atunci cand utilizai <> in modul MLS, este deosebit de important sa: - verificai/modificai rolul actual, - definii corect rolul pentru directorul, care este utilizat pentru intrare/ieire. EXEMPLU PENTRU SELINUX MLS # autentificai-va ca root newrole -r sysadm_r mkdir /tmp/SystemHigh chcon -l SystemHigh /tmp/SystemHigh crontab -e # scriei in fiierul crontab MLS_LEVEL=SystemHigh 0-59 * * * * id -Z > /tmp/SystemHigh/crontest FIIERE /etc/crontab principalul fiier crontab al sistemului. /var/spool/cron/ un director pentru stocarea fiierelor crontab definite de utilizatori. /etc/cron.d/ un director pentru stocarea fiierelor crontab de sistem. CONSULTAI I cron(8), crontab(1) EXTENSII Sunt acceptate aceste ,,porecle" speciale de specificare a timpului, care inlocuiesc cele 5 campuri iniiale de data i ora i sunt prefixate cu caracterul ,,@": @reboot : Se executa o data dupa repornire. @yearly : Se executa o data pe an, adica ,,0 0 1 1 *". @annually : Se executa o data pe an, adica ,,0 0 1 1 *". @monthly : Se executa o data pe luna, adica ,,0 0 1 * *". @weekly : Se executa o data pe saptamana, adica ,,0 0 * * 0". @daily : Se executa o data pe zi, adica ,,0 0 * * *". @hourly : Se executa o data pe ora, adica ,,0 * * * *". AVERTISMENTE Fiierele crontab trebuie sa fie fiiere obinuite sau legaturi simbolice catre fiiere obinuite, nu trebuie sa fie executabile sau cu permisiune de scriere pentru nimeni altcineva decat proprietarul. Aceasta cerina poate fi anulata prin utilizarea opiunii -p in linia de comanda a crond. Daca este utilizat suportul inotify, modificarile din fiierele crontab cu legaturi simbolice nu sunt observate automat de catre demonul cron. Demonul cron trebuie sa primeasca un semnal SIGHUP pentru a reincarca fiierele crontab. Aceasta este o limitare a API-ului inotify. cron cere ca fiecare intrare dintr-un fiier crontab sa se incheie cu un caracter de linie noua. Daca ultima intrare dintr-un fiier crontab nu conine o linie noua (adica se termina cu EOF), cron va considera fiierul crontab (cel puin parial) corupt. Un avertisment va fi scris in syslog. AUTOR Paul Vixie TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . cronie 22 noiembrie 2012 CRONTAB(5)