Lucaine ai botoi pak me pare tutorial i shkëlqyeshëm për cron dhe crontab që mendoj se ia vlen të ndahet. Cron është një lloj ekuivalent me Detyrat e Planifikuara në Windows, vetëm se trajtohet nga terminali. Ata që preferojnë një ndërfaqe vizuale për të arritur të njëjtin qëllim, mund ta shohin këtë një artikull tjetër. |
Çfarë është cron?
Emri cron vjen nga greqishtja chronos që do të thotë "kohë". Në sistemin operativ Unix, cron është një menaxher i rregullt i procesit të sfondit (daemon) që ekzekuton procese ose skripta në intervale të rregullta (për shembull, çdo minutë, ditë, javë ose muaj). Proceset që duhet të ekzekutohen dhe koha në të cilën ato duhet të ekzekutohen specifikohen në skedarin crontab.
Si funksionon
Cron daemon fillon nga /etc/rc.d/ o /etj/init.d në varësi të shpërndarjes. Cron ekzekutohet në sfond, kontrollon tryezën e detyrave të crontab çdo minutë / etj / crontab në / var / rrotull / cron në kërkim të detyrave që duhen realizuar. Si përdorues mund të shtojmë komanda ose skripta me detyra për të cron për të automatizuar disa procese. Kjo është e dobishme për shembull për të automatizuar azhurnimin e një sistemi ose të një sistemi të mirë rezervë.
Çfarë është Crontab?
Crontab është një skedar i thjeshtë teksti që ruan një listë të komandave që do të ekzekutohen në një kohë të specifikuar nga përdoruesi. Crontab do të kontrollojë datën dhe kohën kur skenari ose komanda duhet të ekzekutohet, lejet e ekzekutimit dhe do ta bëjë atë në sfond. Secili përdorues mund të ketë skedarin e tij crontab, në fakt / etj / crontab Supozohet të jetë skedari crontab i përdoruesit rrënjë, kur përdoruesit normalë (dhe madje edhe root) duan të gjenerojnë skedarin e tyre crontab atëherë ne do të përdorim komandën crontab.
Crontab është mënyra më e lehtë për të menaxhuar detyrat e cron në sistemet me shumë përdorues, ose si një përdorues i thjeshtë i sistemit ose përdorues i rrënjës.
Përdorimi i crontab
Po fillojmë me një shembull të thjeshtë.
Ne do të automatizojmë azhurnimin e një sistemi, për të eleminuar bezdisjen e "Unë gjithmonë duhet të azhurnoj dhe nuk më pëlqen kjo!"
Para së gjithash ne do të bëjmë një skenar. Ky skript do të thirret me cron dhe do të përmbajë të gjitha udhëzimet që duam të bëjë, prandaj është e nevojshme ta provoni atë në disa raste dhe në disa mënyra para se ta përfshini në cron, një skenar i thjeshtë azhurnimi si ky:
#! / bin / bash # shembulli i azhurnimit të skriptit # zgjidh shpërndarjen tënde # debian-ubuntu # azhurnimi i apt-marrjes & azhurnimi i apt-get -y #fedora # azhurnimi yum-yt # Arch #pacman --noconfirm -Syu
Hiqni # nga linja juaj distro. Në rast se është Ubuntu / Debian, fillon me apt-get.
Ne e ruajmë skenarin si update.sh (p.sh. direktoria e skripteve shtëpinë tuaj). Ne ndryshojmë lejet e ekzekutimit të skenarit të përmendur me:
chmod a + x ~ / skriptet / azhurnimi.sh
Ne e ekzekutojmë skriptin disa herë për të verifikuar që gjithçka funksionon normalisht, ne modifikojmë atë që është e nevojshme (nuk duhet të përmbajë gabime, nëse jo cron do të përsërisë vetëm një gabim pa pushim). Tani për të shtuar detyrën në crontab tonë.
Shto detyra në crontab
Ne ekzekutojmë botimin e crontab me crontab -e, në disa distros (si ubuntu) na jep mundësinë të zgjedhim redaktuesin e tekstit që duam, pjesën tjetër na mbetet vi. Skedari crontab do të duket diçka e tillë.
# mh dom komanda e përdoruesit
ku:
- m korrespondon me minutën kur skenari do të ekzekutohet, vlera varion nga 0 në 59
- h koha e saktë, trajtohet formati 24-orësh, vlerat variojnë nga 0 në 23, me 0 që është 12:00 mesnatë.
- dom i referohet ditës së muajit, për shembull mund të specifikoni 15 nëse doni të vraponi çdo 15 ditë
- Dow do të thotë dita e javës, mund të jetë numerike (0 deri 7, ku 0 dhe 7 janë e diela) ose 3 shkronjat e para të ditës në anglisht: mon, tue, wed, thu, fri, sat, sun.
- përdorues përcakton përdoruesin i cili do të ekzekutojë komandën, mund të jetë root, ose një përdorues tjetër për sa kohë që ata kanë leje për të ekzekutuar skriptin.
- komandë i referohet komandës ose rrugës absolute të skenarit që do të ekzekutohet, shembull: /home/usuario/scriptts/actualizar.sh, nëse e quan një skenar, duhet të ekzekutohet
Për të qenë të qartë disa shembuj të detyrave të cronit të shpjeguara:
15 10 * * * përdoruesi /home/user/scripts/update.sh
Do të ekzekutojë skriptin e update.sh në 10:15 çdo ditë
15 22 * * * përdoruesi /home/user/scripts/update.sh
Do të ekzekutojë skriptin e update.sh në 10:15 pasdite çdo ditë
00 10 * * 0 azhurnim root apt-get -y Përdorues i rrënjës
Do të zhvillojë një azhurnim çdo të Dielë në 10:00 të mëngjesit
45 10 * * azhurnimi i rrënjës së diellit apt-get -y
Përdoruesi i rrënjës do të ekzekutojë një azhurnim çdo të Dielë (Diell) në 10:45 të mëngjesit
30 7 20 11 * përdoruesi /home/usuario/scripts/update.sh
Më 20 nëntor në orën 7:30 përdoruesi do të ekzekutojë skenarin
30 7 11 11 përdorues dielli /home/usuario/scripts/pastel_con_velitas.sh
Më 11 nëntor në 7:30 të mëngjesit dhe kjo është e diela, përdoruesi do të festojë sysadmin e tij (domethënë unë)
01 * * * * përdoruesi /home/usuario/scripts/molestorecordatorio.sh
Një kujtesë e bezdisshme çdo minutë e çdo orë çdo ditë (NUK rekomandohet).
Ato ende mund të trajtohen vargjet speciale:
30 17 * * 1,2,3,4,5
Në orën 5:30 të pasdites çdo ditë nga e hëna në të premte.
00 12 1,15,28 * *
Në 12 të mesditës çdo të parë, pesëmbëdhjetë dhe 28 të çdo muaji (ideal për listën e pagave)
Nëse kjo është konfuze, trajton crontab vargjet speciale për të përcaktuar këto diapazone.
@reboot Vrapo një herë, në fillim
@ fillon herët vetëm një herë në vit: 0 0 1 1 *
@ çdo vit njësoj si @ herët
@mujore ekzekutohet një herë në muaj, ditën e parë: 0 0 1 * *
@ çdo javë Javë minutën e parë të orës së parë të javës. 0 0 * * 0.
@ditë çdo ditë, në 12:00 A.M. 0 0 * * *
@ mesnate njelloj si @daily
@ orë në minutën e parë të çdo ore: 0 * * * *
Përdorimi i tij është shumë i thjeshtë.
@ përdorues në orë /home/user/scripts/molestorecordatorio.sh @ përdorues mujor /home/user/scripts/backup.sh @ përditësim root apt-get update && apt-get -y upgrade
E fundit por jo më pak e:
Menaxhimi i punës në Cron
skedari crontab
Zëvendësoni skedarin ekzistues crontab me një skedar të përcaktuar nga përdoruesi
crontab -e
Redaktoni skedarin crontab të përdoruesit, çdo rresht i ri do të jetë një detyrë e re crontab.
crontab -l
Renditni të gjitha detyrat e përdoruesit crontab
crontab -d
Fshi crontab-in e përdoruesit
crontab -c drejt
Përcakton direktorinë crontab të përdoruesit (kjo duhet të ketë leje të përdoruesit për të shkruar dhe ekzekutuar)
crontab -u përdorues
parashtesa për të trajtuar crontab-in e një përdoruesi tjetër, shembuj:
$ sudo crontab -l -u rrënjë $ sudo crontab -e përdorues2 #crontab -d -u përdorues
Ky mjet, si shumë të tjerë, mund të shihet më thellë dhe më në detaje në:
Uf ... pak konfuze.
* / 30 mungon (në fushën e minutave) që ekzekutohet çdo 30 minuta ...
Vetëm këtë do të komentoja derisa vendosa të rishikoj komentet
Ky modifikues është një informacion shumë i rëndësishëm dhe diçka shumë e dobishme.
Hello!
Tani për tani po testoj një konfigurim çdo 45 minuta.
* / 45 * * * *, dhe udhëzimi ekzekutohet në 45 minuta të çdo ore DHE çdo orë. Kjo do të thotë:
Shkon në 3:45, pastaj 4:00, 4:45, pastaj 5:00, 5:45, 6:00, 6:45, etj.
Kam diçka të gabuar? Çfarë mund të bëj për ta bërë atë vetëm çdo 45 minuta, ose të paktën një herë në 45 minuta çdo orë.
Hello!
Tani për tani po testoj një konfigurim çdo 45 minuta.
* / 45 * * * *, dhe udhëzimi ekzekutohet në 45 minuta të çdo ore DHE çdo orë. Kjo do të thotë:
Shkon në 3:45, pastaj 4:00, 4:45, pastaj 5:00, 5:45, 6:00, 6:45, etj.
Kam diçka të gabuar? Çfarë mund të bëj për ta bërë atë vetëm çdo 45 minuta, ose të paktën një herë në 45 minuta çdo orë.
Përshëndetje informacion shumë i dobishëm për të sqaruar se si funksionon cron.
bytes
per *
Shkëlqyeshëm, faleminderit që sqaruat se si funksionon cron .. le të vëmë pak dorë
Kjo linjë siç e kuptoj se do të ekzekutohet në 10:15 pasdite, më korrigjoni nëse gaboj
Epo atje thotë 10:15 e mëngjesit
15 22 * * * përdoruesi /home/user/scripts/update.sh
Përshëndetje! informacion shumë i mirë
Për të ekzekutuar një Script çdo gjysmë ore, rreshti që duhet të shtohet në CronTab do të ishte: "30 * * * * root Scrip.sh" E saktë? Shume faleminderit!
Jo. Nëse më kujtohet saktë, për këtë duhet të vendosni / 30 * * * * root Scrip.sh.
Kjo është, shtoni / para 30.
Gëzuar! Paul.
Përshëndetje më pëlqeu postimi juaj, është shumë i plotë por doja t'ju pyesja diçka.
Unë kam probleme me këtë komandë dhe një si "në".
Unë dua të ekzekutoj një skenar në një kohë të caktuar dhe ta vendos
në -f /home/mi_user/Desk/script.sh 18:08 shembull
dhe skenari nuk ekzekutohet në ekran, domethënë në terminal, a ekzekutohet në sfond?
Dhe me cron më ndodh e njëjta gjë, unë redaktoj skedarin crontab me "crontab -e"
në fund shtoj këtë rresht:
46 19 my_user /home/mi_user/Desk/script.sh
dhe nuk bën asgjë, nuk tregon skenarin.
Ndonjë sugjerim? Ju faleminderit shumë dhe kërkoni falje për shqetësimet
Që të shfaqet terminali, mund t'ju duhet të ekzekutoni terminalin dhe të kaloni skriptin si një parametër.
Për shembull:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
Parametri për t'u përdorur mund të ndryshojë bazuar në emulatorin e terminalit që përdorni.
Shpresoj se funksionon.
Perqafo! Paul.
Kontributi vlerësohet.
10 pikë !!
pershendetje 2!!
Faleminderit shumë, më ndihmoi shumë për të sqaruar disa gjëra, faleminderit gjithsej, për më shumë detaje ose pyetje do të shkoj në FAQEN E MAN, përsërita përshëndetjet.
Xhaxhi faleminderit shumë, kam lexuar dhe testuar shembujt. faleminderit shumë ... është shumë e kuptueshme Brohoritje
Kam përdorur ubuntu Server 12.04.2 LTS dhe versionin e crontab që kam, për të fshirë listën e punëve të përdoruesit është përdorur, crontab -r (dhe -l, siç thotë ky manual). Sigurisht që bëhet fjalë për versione.
Nga ana tjetër, unë një herë kam ekzekutuar vetëm crontab dhe kjo lloj më lejoni të krijoj dosjen time të ekzekutimit, por kjo nuk ishte ajo që po ekzekutohej. Ai që ekzekutohet është ai në / etj / crontab. mbase dikush do ta përdorë komentin.
PS (Unë kërkova me lokalizimin dhe ku është crontab por ajo ktheu vetëm adresën e lartpërmendur dhe një skedar tjetër që është i koduar, kështu që nëse ai që u ekzekutua ishte ai në / etc / crontab, por kur ekzekutonte komandën crontab -e, imi u shfaq me të gjitha punët që kisha përcaktuar) ku po ruhej kjo skedar '???? Të fala. Unë gjithmonë futem me root.
E shkëlqyeshme, shumë e dobishme !!!
Përshëndetje, unë do të doja ta bëja këtë ………… «15 10 * * * root ifdown eth0»
kjo do të thotë që në një kohë të caktuar karta e rrjetit është e fikur ... mirë, unë e vendosa atë në crontab dhe nuk funksionoi ... çfarë ka?
Përshëndetje dhe faleminderit
Ke humbur përcaktimin e "mon" pas titullit "Shto detyra në crontab"
Artikulli është akoma i këndshëm, cron është jashtëzakonisht i dobishëm.
Sa interesant ishte ai post i mirë, më pyesni
Nëse dua të mbaj të dhënat e lëna nga ekzekutimi i detyrave, ku mund ta shoh?
është të vendos që unë dua të shoh historinë e veprimeve të bëra në të kaluarën e kësaj skedari dhe dua të shoh kush e ka modifikuar atë dhe datën
falënderim
Unë dua të kontrolloj historinë e modifikimit të kësaj
si mund ta bej
falënderim
Mirëmëngjesi,
Unë mendoj se në skenarin ubuntu keni bërë një gabim, ju keni vendosur azhurnimin ap-get -y në vend të azhurnimit apt-get -y. (Ju keni lënë një t).
Një përshëndetje.
Po kështu. Faleminderit!
Perqafo! Paul
Dua të di se si të krijoj një skedar cron për të qenë në gjendje të specifikoj kohën secila kur ekzekutohet, direktorinë, etj.
Faleminderit për sqarimin e operacionit dhe komandat themelore për cron, tani për të argëtuar veten për pak.
Sa herë që kërkoj informacion në lidhje me ndonjë temë që lidhet me Gnu / Linux, shkoj rreth e rrotull për të gjetur gjithnjë në 90% të rasteve mësimin më të mirë në këtë komunitet të shkëlqyeshëm, mendoj se tani e tutje do të filloj këtu dhe pastaj diku tjetër.
të fala
Faleminderit Sander! Nje perqafim! Paul.
dom = dita e muajit
dow = dita e javes
është më lehtë nëse shoqërohesh
Faleminderit shumë, shumë i plotë dhe i shpjeguar mirë.
Kjo është e njëjta gjë që na dha mësuesi im i Sistemeve Operative, unë nuk ndryshoj asgjë, tani shoh pse klasa është kaq e keqe .-. Epo, kjo është e njëjtë me detyrat e shtëpisë xD
Vlerësuar,
Kërkoni, a mund të kufizohet kohëzgjatja e një detyre?
Për shembull, unë kam një detyrë që përsëritet çdo 5 minuta, në përsëritje nëse ajo detyrë është aktive, le ta vrasë dhe ekzekutoje përsëri.
Thanks,
Marcelo.-
Përshëndetje, Marcelo!
Unë mendoj se do të ishte më mirë nëse ju e ngrini këtë pyetje në shërbimin tonë të pyetjeve dhe përgjigjeve të thirrur Kërkoj DesdeLinux në mënyrë që i gjithë komuniteti t'ju ndihmojë në zgjidhjen e problemit tuaj.
Një përqafim, Pablo.
post i mbare
Cila është komanda për terminal për të shtuar detyrat në crontab (pa hyrë në crontab dhe shtimi i tyre manualisht me 'crontab -e' ose zëvendësimi i crontab me një crontab tjetër me 'skedar crontab').
Ideja është të krijoni një skenar të jashtëm për të shtuar detyrat në crontab
Falënderim
Unë mendoj se ju mund të përdorni "echo" çdo gjë që dëshironi të shtoni "| mace >> 'rruga cronotab (/ etj / cronotab)' «
Si do të ekzekutohej një shprehje çdo 3 ditë saktësisht
Hey.
Kam një problem në ekzekutimin e një pune cron.
Unë drejtoj detyrën vijuese me cronta -e:
01 * * * * root /home/user/script/mfile.sh
por detyra nuk është bërë. Unë kam verifikuar që myfile.sh ka leje ekzekutimi dhe se përdoruesi që e ekzekuton atë është root.
Unë ekzekutoj të njëjtën detyrë në / etc / crontab dhe pasi të rifilloj shërbimin, nuk funksionon as për mua.
Përmbajtja e myfile.sh është një komandë që azhurnon një DB dhe nëse e ekzekutoj në tastierë funksionon.
ndonjë ide se cili mund të jetë problemi?
Likelyshtë e mundshme që përdoruesi i bazës së të dhënave nuk i ka të gjitha lejet dhe së pari do të duhet të eksportoni variablat e mjedisit nga motori juaj i bazës së të dhënave.
Për shembull në db2 kjo linjë do të shkojë në fillim të skenarit
. / shtëpi / db2inst1 / sqllib / db2profile
Një shkak tjetër mund të jetë që skenari kërkon lidhje me bazën e të dhënave, të bëjë lidhjen me bazën e të dhënave brenda skriptit
Unë nuk e dija se duhej të rifilloja copën, unë isha duke luftuar me këtë për një kohë
Ata do të dinë të tregojnë se detyra është ekzekutuar çdo fund të muajit, në kohën e treguar .. detaji është se nuk mund ta arrij se si e di që merr ditën e fundit të çdo muaji .. ??? Unë u detyrova t'i shkruaj një nga një, por kur vjen fundi i muajit shkurt se është biciesto është e komplikuar për mua ..
diten e mire!!
Si mund ta ndaloj procesin që po ekzekutohet në crontab?
procesi *
Mund të jetë që ju mund të më ndihmoni? skenari eu tenho um nga minha autori që nuk funksionon asnjë crontab! Jb dei të gjitha lejet, jo një cron ose përdorues specifik që mund ta ekzekutojë - asgjë nuk ndodh! Do të doja të dija nëse mund të më ndihmoni, disa gjëra të tjera nuk funksionojnë! Vlws
Si do ta vendosnit një detyrë për të ekzekutuar çdo ditë të fundit të muajit (ditët: 31-30-28)?
Siç e dini tashmë, komanda su përdoret për të ndryshuar përdoruesin në një tastierë. Nëse unë përdor komandën su kështu: "përdoruesi yt" ndryshon përdoruesin por pa cilësimet e duhura të "përdoruesit", nëse ekzekutoj su si: "përdorues i vetë" ndrysho përdoruesin duke ngarkuar cilësimet e përdoruesit. Me cron tregoj përdoruesin, por si mund t'i ngarkoj cilësimet e këtij përdoruesi?
Dhe nëse dua ta ndaloj?
Përshëndetje,
Nuk e di se çfarë po bëj keq, por ndjek hapat dhe asgjë nuk ekzekutohet. E kam Provuar:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * rrënjë usr / bin / test.sh
dhe asgjë fare. Nuk ekzekuton asgjë. Unë kam rebootuar dhe gjithçka.
thank you very much