Lucaine publicat cu ceva timp in urma excelent tutorial despre cron și crontab asta cred că merită împărtășit. Cron este un fel de echivalent cu sarcinile programate în Windows, doar că este manipulat de la terminal. Cei care preferă o interfață vizuală pentru a atinge același obiectiv, pot vedea acest lucru un alt articol. |
Ce este cron?
Numele cron provine din grecescul chronos care înseamnă „timp”. În sistemul de operare Unix, cron este un manager de proces obișnuit (daemon) care rulează procese sau scripturi la intervale regulate (de exemplu, în fiecare minut, zi, săptămână sau lună). Procesele care trebuie executate și ora la care trebuie executate sunt specificate în fișierul crontab.
lucrari COMO
Demonul cron începe de la /etc/rc.d/ o /etc/init.d în funcție de distribuție. Cron rulează în fundal, verifică tabelul de sarcini crontab în fiecare minut / etc / crontab o o / var / spool / cron în căutarea sarcinilor de îndeplinit. Ca utilizator, putem adăuga comenzi sau scripturi cu sarcini pe cron pentru a automatiza unele procese. Acest lucru este util, de exemplu, pentru a automatiza actualizarea unui sistem sau a unui sistem de backup bun.
Ce este Crontab?
Crontab este un fișier text simplu care stochează o listă de comenzi care trebuie executate la un moment specificat de utilizator. Crontab va verifica data și ora când ar trebui executat scriptul sau comanda, permisiunile de execuție și o va face în fundal. Fiecare utilizator poate avea propriul fișier crontab, de fapt / etc / crontab se presupune că este fișierul crontab al utilizatorului rădăcină, atunci când utilizatorii normali (și chiar rădăcina) doresc să își genereze propriul fișier crontab, atunci vom folosi comanda crontab.
Crontab este cel mai simplu mod de a gestiona sarcinile cron pe sisteme multi-utilizator, fie ca simplu utilizator de sistem, fie ca utilizator root.
Folosind crontab
Începem cu un exemplu simplu.
Vom automatiza actualizarea unui sistem, pentru a elimina enervantul „Trebuie să actualizez întotdeauna și nu-mi place asta!”
În primul rând vom realiza un scenariu. Acest script va fi apelat de cron și va conține toate instrucțiunile pe care dorim să le facă, de aceea este necesar să îl testăm în mai multe cazuri și în mai multe moduri înainte de a-l include în cron, un script de actualizare simplu ca acesta:
#! / bin / bash # exemplu de actualizare script # alegeți distribuția dvs. # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Eliminați # de pe linia dvs. de distribuție. În cazul în care este Ubuntu / Debian, începe cu apt-get.
Salvăm scriptul ca update.sh (de exemplu, directorul de scripturi acasă). Modificăm permisiunile de execuție ale scriptului menționat cu:
chmod a + x ~ / scripts / update.sh
Executăm scriptul de câteva ori pentru a verifica dacă totul funcționează fără probleme, modificăm ceea ce este necesar (nu trebuie să conțină erori, altfel cron va repeta o eroare doar iar și iar). Acum, pentru a adăuga sarcina la crontab-ul nostru.
Adăugați sarcini la crontab
Executăm ediția crontab cu crontab -e, în unele distribuții (cum ar fi Ubuntu) ne oferă opțiunea de a alege editorul de text pe care îl dorim, restul ne-a rămas cu vi. Fișierul crontab va arăta cam așa.
# mh dom mon dow user command
Unde:
- m corespunde minutului în care va fi executat scriptul, valoarea variază de la 0 la 59
- h ora exactă, formatul de 24 de ore este gestionat, valorile variază de la 0 la 23, 0 fiind la miezul nopții 12:00.
- cadou se referă la ziua lunii, de exemplu, puteți specifica 15 dacă doriți să rulați la fiecare 15 zile
- dow înseamnă ziua săptămânii, poate fi numerică (de la 0 la 7, unde 0 și 7 sunt duminică) sau primele 3 litere ale zilei în limba engleză: lun, mar, wed, joi, vin, sat, soare.
- utilizator definește utilizatorul care va executa comanda, poate fi root sau un alt utilizator, atâta timp cât au permisiunile de a executa scriptul.
- comandă se referă la comanda sau calea absolută a scriptului de executat, exemplu: /home/usuario/scripts/update.sh, dacă apelează un script, acesta trebuie să fie executabil
Pentru a fi clar câteva exemple de sarcini cron explicate:
15 10 * * * utilizator /home/usuario/scripts/update.sh
Acesta va rula scriptul update.sh la 10:15 în fiecare zi
15 22 * * * utilizator /home/usuario/scripts/update.sh
Acesta va rula scriptul update.sh la 10:15 în fiecare zi
00 10 * * 0 root apt-get -y update Utilizator rădăcină
Va rula o actualizare în fiecare duminică la 10:00
45 10 * * Sun Root APT -GET -Y UPDATE
Utilizatorul rădăcină va rula o actualizare în fiecare duminică (Duminică) la 10:45 dimineața
30 7 20 11 * user /home/usuario/scripts/update.sh
Pe 20 noiembrie la 7:30 utilizatorul va rula scriptul
30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh
Pe 11 noiembrie la 7:30 și adică duminică, utilizatorul își va sărbători administratorul (adică eu)
01 * * * * utilizator /home/usuario/scripts/molestorecordatorio.sh
Un memento enervant în fiecare minut din fiecare oră în fiecare zi (NU este recomandat).
Ele pot fi încă manipulate game speciale:
30 17 * * 1,2,3,4,5
La 5:30 după-amiaza în fiecare zi de luni până vineri.
00 12 1,15,28 * *
La 12 am fiecare primă, cincisprezecea și 28 a fiecărei luni (ideal pentru salarizare)
Dacă acest lucru este confuz, mânere crontab șiruri speciale pentru a defini aceste intervale.
@reboot Rulați o dată, la pornire
@yearly rulează doar o dată pe an: 0 0 1 1 *
@anual la fel ca @anual
@lunar rulează o dată pe lună, prima zi: 0 0 1 * *
@weekly Weekly primul minut din prima oră a săptămânii. 0 0 * * 0 ″.
@ zilnic, la 12:00 AM 0 0 * * *
@midnight la fel ca @ zilnic
@hourly în primul minut al fiecărei ore: 0 * * * *
Utilizarea sa este foarte simplă.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Ultimul, dar nu cel din urmă:
Managementul locurilor de muncă Cron
fișier crontab
Înlocuiți fișierul crontab existent cu un fișier definit de utilizator
crontab -e
Editați fișierul crontab al utilizatorului, fiecare nouă linie va fi o nouă sarcină crontab.
crontab -l
Enumerați toate sarcinile crontab ale utilizatorului
crontab -d
Ștergeți crontab-ul utilizatorului
crontab -c dir
Definește directorul crontab al utilizatorului (acesta trebuie să aibă permisiunile de scriere și executare ale utilizatorului)
crontab -u utilizator
prefix pentru a gestiona crontabul altui utilizator, exemple:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user
Acest instrument, ca multe altele, poate fi văzut mai în profunzime și mai detaliat în:
Uf ... cam confuz.
* / 30 lipsește (în câmpul de minute) care rulează la fiecare 30 de minute ...
Doar asta aveam să comentez până când am decis să revizuiesc comentariile 😀
Acest modificator este o informație foarte importantă și ceva foarte util.
Buna ziua!
Chiar acum testez o configurație la fiecare 45 de minute.
* / 45 * * * *, iar instrucțiunea este executată la 45 de minute din fiecare oră ȘI în fiecare oră. Adică:
Se execută la 3:45, apoi la 4:00, 4:45, apoi la 5:00, 5:45, 6:00, 6:45 și așa mai departe.
Am ceva greșit? Ce pot face pentru a fi doar la fiecare 45 de minute sau cel puțin o dată la 45 de minute la fiecare oră.
Buna ziua!
Chiar acum testez o configurație la fiecare 45 de minute.
* / 45 * * * *, iar instrucțiunea este executată la 45 de minute din fiecare oră ȘI în fiecare oră. Adică:
Se execută la 3:45, apoi la 4:00, 4:45, apoi la 5:00, 5:45, 6:00, 6:45 și așa mai departe.
Am ceva greșit? Ce pot face pentru a fi doar la fiecare 45 de minute sau cel puțin o dată la 45 de minute la fiecare oră.
Bună ziua, sunt foarte utile informațiile pentru a clarifica cum funcționează cron.
Bytes
pentru *
Excelent, mulțumesc pentru clarificarea modului în care funcționează cron .. hai să punem o mână de ajutor 🙂
Această linie, așa cum am înțeles, va fi executată la 10:15, corectați-mă dacă greșesc
Ei bine, acolo scrie 10:15 dimineața
15 22 * * * utilizator /home/usuario/scripts/update.sh
Salut! informații foarte bune.
Pentru a executa un script la fiecare jumătate de oră, linia care ar trebui adăugată la CronTab ar fi: "30 * * * * root Scrip.sh" Corect? Mulțumesc mult!
Nu. Dacă îmi amintesc bine, pentru asta trebuie să puneți / 30 * * * * root Scrip.sh.
Adică, adăugați / înainte de 30.
Noroc! Paul.
Buna ziua mi-a placut postarea ta, este foarte completa dar am vrut sa te intreb ceva.
Am probleme cu această comandă și una ca „la”.
Vreau să rulez un script la un anumit moment și să pun
la -f /home/mi_user/Desk/script.sh 18:08 exemplu
iar scriptul nu este executat pe ecran, adică în terminal, este executat în fundal?
Și cu cron mi se întâmplă același lucru, editez fișierul crontab cu „crontab -e”
la final adaug această linie:
46 19 my_user /home/mi_user/Desk/script.sh
și nu face nimic, nu arată scenariul.
Vreo idee? Vă mulțumesc foarte mult și vă cereți scuze pentru orice neplăceri
Pentru ca terminalul să apară, poate fi necesar să rulați terminalul și să treceți scriptul ca parametru.
De exemplu:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Parametrul de utilizat poate varia în funcție de emulatorul de terminal pe care îl utilizați.
Sper să funcționeze.
Îmbrăţişare! Paul.
Contribuția este apreciată.
10 puncte !!
salut2 !!
Vă mulțumesc foarte mult, m-a ajutat foarte mult să clarific unele lucruri, mulțumiri totale, pentru mai multe detalii sau îndoieli voi merge la PAGINA OMULUI, salutări reiterate.
Unchiul vă mulțumesc foarte mult, am citit și testat exemplele. multumesc mult ... este foarte de inteles. Noroc
Am folosit ubuntu Server 12.04.2 LTS și se folosește versiunea de crontab pe care o am, pentru a șterge lista de joburi a utilizatorului, crontab -r (și -l, așa cum spune acest manual). Sigur că este vorba de versiuni.
Pe de altă parte, odată am rulat doar crontab și acest tip de lăsați-mă să îmi creez propriul fișier de execuție, dar acesta nu a fost cel care a fost executat. Cel care rulează este cel din / etc / crontab. poate cineva va folosi comentariul.
PS (am căutat cu localizarea și unde este crontab, dar a returnat doar adresa menționată anterior și un alt fișier care este criptat, deci dacă cel care a fost executat a fost cel din / etc / crontab, dar când executam comanda crontab -e, a mea ar fi apar cu toate joburile pe care le definisem) unde a fost stocat acest fișier '???? Salutari. Mă conectez întotdeauna cu root.
Excelent, foarte util !!!
Bună ziua, aș vrea să fac asta ………… «15 10 * * * root ifdown eth0»
adică, la un moment dat, placa de rețea se oprește ………… ei bine, am pus-o în crontab și nu a funcționat …… .. ce se întâmplă?
Felicitări și mulțumiri
Ați ratat definirea „lun” după titlul „Adăugați sarcini la crontab”
Articolul este încă frumos, cron este extrem de util.
Cât de mișto a fost acel post bun, întrebați-mă
Dacă vreau să țin evidența înregistrărilor lăsate de executarea sarcinilor, unde o pot vedea?
este să decid că vreau să văd istoricul acțiunilor făcute în trecut în acest fișier și vreau să văd cine l-a modificat și data
Gracias
Vreau să verific istoricul modificărilor
cum o pot face
Gracias
Bună dimineața,
Cred că în scriptul ubuntu ați făcut o greșeală, ați pus ap-get -y upgrade în loc de apt-get -y upgrade. (Ai lăsat o t).
Un salut.
La fel este. Mulțumesc!
Îmbrăţişare! Paul
Vreau să știu cum să creez un fișier cron pentru a putea specifica fiecare dată când este executat, directorul etc.
Vă mulțumim pentru clarificarea funcționării și a comenzilor de bază pentru cron, acum pentru a vă distra puțin.
Ori de câte ori caut informații despre orice subiect legat de Gnu / Linux, fac o rundă rotundă pentru a găsi întotdeauna în 90% din cazuri cel mai bun tutorial din această mare comunitate, cred că de acum înainte voi începe aici și apoi în altă parte.
În ceea ce priveşte
Mulțumesc Sander! O imbratisare! Paul.
dom = ziua lunii
dow = ziua săptămânii
este mai ușor dacă te asociezi
Vă mulțumesc foarte mult, foarte complet și bine explicat.
Acesta este același lucru pe care ni l-a dat profesorul meu de sistem de operare, nu schimb nimic, acum văd de ce clasa este atât de proastă. - Ei bine, este la fel ca temele xD
Estimat,
Interogare, poate fi limitată durata unei sarcini?
De exemplu, am o sarcină care se repetă la fiecare 5 minute, la repetare, dacă acea sarcină este încă activă, ucideți-o și rulați din nou.
Multumesc,
Marcelo.-
Bună, Marcelo!
Cred că ar fi mai bine dacă ridicați această întrebare în serviciul nostru de întrebări și răspunsuri cere DesdeLinux astfel încât întreaga comunitate să vă poată ajuta cu problema dumneavoastră.
O îmbrățișare, Pablo.
post bun.
Care este comanda per terminal pentru a adăuga sarcini în crontab (fără a intra în crontab și adăugându-le manual cu „crontab -e” sau înlocuirea crontabului cu un alt crontab cu „fișier crontab”).
Ideea este de a crea un script extern pentru a adăuga sarcinile la crontab
Mulţumiri
mi se pare că ai putea folosi „ecou” orice vrei să adaugi ”| cat >> 'calea cronotab (/ etc / cronotab)' «
Cum ar funcționa o expresie exact la fiecare 3 zile
Buna ziua.
Am o problemă la executarea unui job cron.
Execut următoarea sarcină cu cronta -e:
01 * * * * root /home/user/script/myfile.sh
dar sarcina nu este realizată. Am verificat dacă myfile.sh are permisiunea de a executa și că utilizatorul care o execută este root.
Execut aceeași sarcină în / etc / crontab și după repornirea serviciului, nici pentru mine nu funcționează.
Conținutul myfile.sh este o comandă care actualizează un DB și, dacă îl rulez în consolă, funcționează.
vreo idee care ar putea fi problema?
Este posibil ca utilizatorul bazei de date să nu aibă toate permisiunile și va trebui mai întâi să exportați variabilele de mediu din motorul bazei de date.
De exemplu, în db2 această linie ar merge la începutul scriptului
. / home / db2inst1 / sqllib / db2profile
O altă cauză ar putea fi faptul că scriptul necesită conectarea la baza de date, face conexiunea la baza de date în cadrul scriptului
Nu știam că trebuie să repornesc crondul, mă lupt cu asta de ceva vreme
Ei vor ști cum să indice că sarcina se execută la fiecare sfârșit de lună, la ora indicată .. detaliul este că nu pot realiza cum știu că durează ultima zi a fiecărei luni .. ??? A trebuit să le notez pe rând, dar când vine sfârșitul lunii februarie că este biciesto este complicat pentru mine ..
o zi buna!!
Cum opresc procesul care se execută în crontab?
proces * …………
S-ar putea să mă ajuți? eu tenho um script de minha authored that does not work no crontab! JB dei toate permisele, niciun cron sau utilizator privat care să îl poată executa - cel mai mult nu se întâmplă nimic! Aș vrea să știu dacă mă puteți ajuta, alte lucruri funcționează fără cron! Vlws
Cum ați pune o sarcină în fiecare zi a lunii (zile: 31-30-28)?
După cum știți, comanda su este utilizată pentru a schimba utilizatorul într-o consolă. Dacă folosesc comanda su astfel: "utilizatorul tău" schimbă utilizatorul, dar fără setările corespunzătoare de "utilizator", dacă rulez su ca: "su - utilizator" schimbă utilizatorul încărcând setările utilizatorului. Cu cron indic utilizatorul, dar cum pot încărca setările acestui utilizator?
Și dacă vreau să-l opresc?
Buna,
Nu știu ce fac greșit, dar urmez pașii și nu se execută nimic. Am încercat:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * rădăcină usr / bin / test.sh
si nimic deloc. Nu execută nimic. Am repornit și totul.
mulţumesc mult