Lucaine nai-publish kanina mahusay na tutorial sa cron at crontab na sa tingin ko ay sulit na ibahagi. Ang Cron ay isang uri ng katumbas ng Nakaiskedyul na Mga Gawain sa Windows, tanging iyon lang ang hinahawakan mula sa terminal. Ang mga mas gusto ang isang visual interface upang makamit ang parehong layunin, makikita ito isa pang artikulo. |
Ano ang cron?
Ang pangalang cron ay nagmula sa Greek kronos na nangangahulugang "oras". Sa operating system ng Unix, ang cron ay isang regular na tagapamahala ng proseso ng background (daemon) na nagpapatakbo ng mga proseso o script sa mga regular na agwat (halimbawa, bawat minuto, araw, linggo, o buwan). Ang mga proseso na dapat ipatupad at ang oras kung saan dapat silang isagawa ay tinukoy sa crontab file.
Como funciona
Ang cron daemon ay nagsisimula sa /etc/rc.d/ o /etc/init.d depende sa pamamahagi. Tumatakbo ang Cron sa background, sinusuri ang talahanayan ng gawain ng crontab bawat minuto / etc / crontab o en / var / spool / cron sa paghahanap ng mga gawain na naisasagawa. Bilang isang gumagamit maaari kaming magdagdag ng mga utos o script na may mga gawain upang i-automate ang ilang mga proseso. Kapaki-pakinabang ito halimbawa upang i-automate ang pag-update ng isang system o isang mahusay na backup system.
Ano ang Crontab?
Ang Crontab ay isang simpleng file ng teksto na nag-iimbak ng isang listahan ng mga utos na naisakatuparan sa isang oras na tinukoy ng gumagamit. Susuriin ng Crontab ang petsa at oras kung kailan dapat isagawa ang script o utos, ang mga pahintulot sa pagpapatupad at gagawin ito sa likuran. Ang bawat gumagamit ay maaaring magkaroon ng kanilang sariling crontab file, sa katunayan ang / etc / crontab ipinapalagay na crontab file ng root ng gumagamit, kapag ang mga normal na gumagamit (at kahit na ang ugat) ay nais na bumuo ng kanilang sariling crontab file pagkatapos ay gagamitin namin ang crontab command.
Ang Crontab ay ang pinakamadaling paraan upang pamahalaan ang mga gawain sa cron sa mga multi-user system, alinman bilang isang simpleng gumagamit ng system o root user.
Paggamit ng crontab
Nagsisimula kami sa isang simpleng halimbawa.
Isasaayos namin ang pag-update ng isang system, upang maalis ang nakakainis na "Palagi kong kailangang mag-update at hindi ko gusto iyon!
Una sa lahat gagawa kami ng isang script. Ang script na ito ay tatawagin ng cron at maglalaman ng lahat ng mga tagubiling nais naming gawin, samakatuwid kinakailangan na subukan ito sa maraming mga kaso at sa maraming paraan bago isama ito sa cron, isang simpleng script sa pag-update na tulad nito:
#! / bin / bash #script update halimbawa #piliin ang iyong pamamahagi # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Alisin ang # mula sa iyong distro line. Kung sakaling ito ay Ubuntu / Debian, nagsisimula ito sa apt-get.
Nai-save namin ang script bilang update.sh (hal. Direktoryo ng mga script ang iyong tahanan). Binabago namin ang mga pahintulot sa pagpapatupad ng nasabing script sa:
chmod a + x ~ / script / update.sh
Isinasagawa namin ang script ng maraming beses upang ma-verify na ang lahat ay tumatakbo nang maayos, binabago namin kung ano ang kinakailangan (hindi ito dapat maglaman ng mga error, kung hindi man ay uulit-ulitin lamang ng cron ang isang error nang paulit-ulit). Ngayon upang idagdag ang gawain sa aming crontab.
Magdagdag ng mga gawain sa crontab
Isinasagawa namin ang edisyon ng crontab na may crontab -e, sa ilang mga distrito (tulad ng ubuntu) binibigyan nito kami ng pagpipilian upang piliin ang text editor na gusto namin, ang natitira ay naiwan sa amin ng vi. Ang crontab file ay magmumukhang ganito.
# mh dom mon dow utos ng gumagamit
kung saan:
- m tumutugma sa minutong ang script ay naisakatuparan, ang halaga ay umaabot mula 0 hanggang 59
- h ang eksaktong oras, ang 24-oras na format ay hawakan, ang mga halaga ay umaabot mula 0 hanggang 23, na ang 0 ay nasa alas-12 ng hatinggabi.
- regalo tumutukoy sa araw ng buwan, halimbawa maaari mong tukuyin ang 15 kung nais mong tumakbo tuwing 15 araw
- dow nangangahulugang ang araw ng linggo, maaari itong maging bilang (0 hanggang 7, kung saan ang 0 at 7 ay Linggo) o ang unang 3 mga titik ng araw sa Ingles: mon, tue, wed, thu, pray, sat, sun.
- gumagamit tinutukoy ang gumagamit na magpapatupad ng utos, maaari itong maging ugat, o ibang gumagamit basta mayroon silang mga pahintulot na ipatupad ang script.
- utos tumutukoy sa utos o sa ganap na landas ng script na naisasagawa, halimbawa: /home/usuario/scripts/update.sh, kung tumatawag ito ng isang script dapat itong maipatupad
Upang maging malinaw ang ilang mga halimbawa ng mga gawain sa cron na ipinaliwanag:
15 10 * * * user /home/user/scripts/update.sh
Patakbuhin nito ang update.sh script nang 10:15 am araw-araw
15 22 * * * user /home/user/scripts/update.sh
Patakbuhin nito ang update.sh script sa 10:15 pm araw-araw
00 10 * * 0 root apt-get -y i-update ang Root user
Magpapatakbo ito ng pag-update tuwing Linggo ng 10:00 ng umaga
45 10 * * root sun apt-get -y update
Ang Root user ay magpapatakbo ng isang pag-update tuwing Linggo (Araw) ng 10:45 ng umaga
30 7 20 11 * gumagamit / home /usuario/scripts/update.sh
Sa Nobyembre 20 ng 7:30 tatakbo ang gumagamit ng script
30 7 11 11 sun user /home/usuario/scripts/pastel_con_velitas.sh
Sa Nobyembre 11 ng 7:30 ng umaga at iyon ay Linggo, ipagdiriwang ng gumagamit ang kanyang sysadmin (iyon ay, ako)
01 * * * * gumagamit / home /usuario/scripts/molestorecordatorio.sh
Isang nakakainis na paalala bawat minuto ng bawat oras araw-araw (HINDI inirerekomenda).
Maaari pa silang hawakan mga espesyal na saklaw:
30 17 * * 1,2,3,4,5
Sa 5:30 ng hapon araw-araw mula Lunes hanggang Biyernes.
00 12 1,15,28 **
Sa alas-12 ng tanghali sa una, ikalabinlim at ika-28 ng bawat buwan (mainam para sa payroll)
Kung nakalilito ito, humahawak ang crontab mga espesyal na string upang tukuyin ang mga saklaw na ito.
@reboot Patakbuhin nang isang beses, sa pagsisimula
Tumatakbo lamang si @yearly isang beses sa isang taon: 0 0 1 1 *
@manwal na kapareho ng @ taon
@monthly tumatakbo isang beses sa isang buwan, ang unang araw: 0 0 1 * *
@weekly Lingguhan ang unang minuto ng unang oras ng linggo. 0 0 * * 0 ″.
@ araw-araw araw-araw, sa 12:00 A.M. 0 0 * * *
@midnight parehas ng @daily
@ oras sa unang minuto ng bawat oras: 0 * * * *
Napakadali ng paggamit nito.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Huling ngunit hindi huli:
Pamamahala sa trabaho sa Cron
file ng crontab
Palitan ang umiiral na crontab file ng isang file na tinukoy ng gumagamit
crontab -e
I-edit ang crontab file ng gumagamit, ang bawat bagong linya ay magiging isang bagong gawain sa crontab.
crontab -l
Ilista ang lahat ng mga gawain sa crontab ng gumagamit
crontab -d
Tanggalin ang crontab ng gumagamit
crontab -c dir
Tinutukoy ang direktoryo ng crontab ng gumagamit (dapat itong may sulat ng gumagamit at magpatupad ng mga pahintulot)
crontab -u gumagamit
awalan upang hawakan ang crontab ng ibang gumagamit, mga halimbawa:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user
Ang tool na ito, tulad ng marami pang iba, ay maaaring makita nang mas malalim at mas detalyado sa:
Ugh ... medyo nakalilito.
* / 30 ay nawawala (sa patlang ng minuto) na tumatakbo bawat 30 minuto ...
Lamang ito ay magkomento ako hanggang sa magpasya akong suriin ang mga komento 😀
Ang modifier na ito ay isang napakahalagang impormasyon at isang bagay na napaka kapaki-pakinabang.
Hello!
Sa ngayon sinusubukan ko ang isang pagsasaayos bawat 45 minuto.
* / 45 * * * *, at ang tagubilin ay naisasagawa sa 45 minuto ng bawat oras AT bawat oras. Na ibig sabihin:
Tumatakbo ito sa 3:45, pagkatapos ng 4:00, 4:45, pagkatapos ng 5:00, 5:45, 6:00, 6:45, at iba pa.
Mayroon akong mali? Ano ang magagawa ko upang magawa ko lamang ito sa bawat 45 minuto, o kahit minsan sa 45 minuto bawat oras.
Hello!
Sa ngayon sinusubukan ko ang isang pagsasaayos bawat 45 minuto.
* / 45 * * * *, at ang tagubilin ay naisasagawa sa 45 minuto ng bawat oras AT bawat oras. Na ibig sabihin:
Tumatakbo ito sa 3:45, pagkatapos ng 4:00, 4:45, pagkatapos ng 5:00, 5:45, 6:00, 6:45, at iba pa.
Mayroon akong mali? Ano ang magagawa ko upang magawa ko lamang ito sa bawat 45 minuto, o kahit minsan sa 45 minuto bawat oras.
Kumusta sobrang kapaki-pakinabang ng impormasyon upang linawin kung paano gumagana ang cron.
Bytes
para sa *
Mahusay, salamat sa paglilinaw kung paano gumagana ang cron .. maglagay tayo ng kaunting kamay 🙂
Ang linyang ito sa pagkakaintindi ko ay papatayin sa 10:15 pm, iwasto ako kung mali ako
Well doon sinasabi 10:15 am
15 22 * * * user /home/user/scripts/update.sh
Kamusta! napakagandang impormasyon.
Upang maisagawa ang isang Script bawat kalahating oras, ang linya na dapat idagdag sa CronTab ay: "30 * * * * root Scrip.sh" Tama? Maraming salamat!
Hindi. Kung naaalala ko nang tama, para doon kailangan mong ilagay / 30 * * * * root Scrip.sh.
Iyon ay, idagdag ang / bago ang 30.
Cheers! Paul
Kumusta nagustuhan ko ang iyong post, ito ay napaka-kumpleto ngunit nais kong magtanong sa iyo ng isang bagay.
Nagkakaproblema ako sa utos na ito at ang isa tulad ng "sa".
Nais kong magpatakbo ng isang script sa isang tiyak na oras at ilagay
sa -f /home/mi_user/Desk/script.sh 18:08 halimbawa
at ang script ay hindi naisakatuparan sa screen, iyon ay, sa terminal, ito ay naisakatuparan sa background?
At sa cron pareho ang nangyayari sa akin, ini-edit ko ang crontab file na may "crontab -e"
sa dulo idaragdag ko ang linyang ito:
46 19 my_user /home/mi_user/Desk/script.sh
at wala itong ginagawa, hindi nito ipinapakita ang script.
May anumang mungkahi? Maraming salamat at humihingi ng paumanhin para sa anumang abala
Para lumitaw ang terminal, maaaring kailangan mong patakbuhin ang terminal at ipasa ang script bilang isang parameter.
Por ejemplo:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Ang parameter na gagamitin ay maaaring mag-iba batay sa ginagamit mong terminal emulator.
Sana gumana ito.
Yakap! Paul
Ang kontribusyon ay pinahahalagahan.
10 puntos!!
salu2!!
Maraming salamat, malaki ang naitulong nito sa akin upang linawin ang ilang mga bagay, kabuuang salamat, para sa higit pang mga detalye o mga katanungan na pupunta ako sa MAN PAGE, inulit ang mga pagbati.
Tito maraming salamat, binabasa ko at sinusubukan ang mga halimbawa. maraming salamat ... napaka naiintindihan. regards
Gumamit ako ng ubuntu Server 12.04.2 LTS, at ang bersyon ng crontab na mayroon ako, upang tanggalin ang listahan ng mga trabaho ng gumagamit ay ginagamit, crontab -r (at -l, tulad ng sinasabi ng manwal na ito). Sigurado na ito ay sa pamamagitan ng tanong ng mga bersyon.
Sa kabilang banda, minsan lang akong nagpatakbo ng crontab at ang ganitong uri ay hinayaan akong lumikha ng aking sariling file ng pagpapatupad, ngunit hindi ito ang isinasagawa. Ang tumatakbo ay ang isa sa / etc / crontab. baka may gumamit ng comment.
PS (Naghanap ako gamit ang hanapin at kung saan ang crontab ngunit ibinalik lamang nito ang nabanggit na address at isa pang file na naka-encrypt, kaya't kung ang naipatupad ay ang nasa / etc / crontab, ngunit nang ipatupad ang crontab -e command, lumitaw ang aking sa lahat ng mga trabaho na tinukoy ko) kung saan ang file na ito ay naiimbak '???? Pagbati po. Palagi akong nag-log in gamit ang root.
Napakahusay, napaka kapaki-pakinabang !!!
Kumusta, nais kong gawin ito ………… «15 10 * * * root ifdown eth0»
iyon ay, sa isang tiyak na oras ang network card ay naka-off ...……… mabuti, inilagay ko ito sa crontab at hindi ito gumana ...... .. ano na
Pagbati at salamat
Hindi mo tinukoy ang "mon" pagkatapos ng pamagat na "Magdagdag ng mga gawain sa crontab"
Ang artikulo ay maganda pa rin, cron ay lubos na kapaki-pakinabang.
Gaano kahusay ang magandang post, tanungin mo ako
Kung nais kong subaybayan ang mga talaang naiwan ng pagpapatupad ng mga gawain, saan ko ito makikita?
ay decdir Nais kong makita ang kasaysayan ng mga pagkilos na ginawa sa nakaraan ng file na ito at nais kong makita kung sino ang nagbago nito at ang petsa
salamat
Nais kong suriin ang kasaysayan ng pagbabago ng ito
paano ko ito magagawa
salamat
Magandang umaga,
Sa palagay ko na sa script ng ubuntu ay nagkamali ka, inilagay mo ang ap-get -y pag-upgrade sa halip na apt-get -y upgrade. (Naiwan mo ang isang t).
Isang pagbati.
Ganun din. Salamat!
Yakap! Paul
Nais kong malaman kung paano lumikha ng isang cron file upang matukoy ang oras bawat isa kapag ito ay naisakatuparan, ang direktoryo, atbp.
Salamat sa paglilinaw ng operasyon at mga pangunahing utos para sa cron, ngayon upang aliwin ang iyong sarili nang kaunti.
Tuwing naghahanap ako ng impormasyon sa anumang paksang nauugnay sa Gnu / Linux, paikot-ikot ako upang palaging makita sa 90% ng mga kaso ang pinakamahusay na tutorial sa mahusay na pamayanan, sa palagay ko mula ngayon ay magsisimula ako dito at pagkatapos sa ibang lugar.
Regards
Salamat Sander! Isang yakap! Paul
dom = araw ng buwan
dow = araw ng linggo
mas madali kung makakasama mo
Maraming salamat, kumpleto at mahusay na naipaliwanag.
Ito ang parehong bagay na ibinigay sa amin ng aking guro ng OS, wala akong binabago, ngayon nakikita ko kung bakit napakasama ng klase .-. Well, ito ay kapareho ng takdang-aralin xD
Tinantyang,
Pagtatanong, maaari bang limitado ang tagal ng oras ng isang gawain?
Halimbawa mayroon akong isang gawain na inuulit ang sarili tuwing 5 minuto, sa pag-uulit kung ang gawaing iyon ay aktibo pa rin, hayaan itong patayin at patakbuhin ito muli.
Salamat,
Marcelo.-
Kumusta, Marcelo!
Sa palagay ko mas makakabuti kung itataas mo ang katanungang ito sa aming tanong at sagot na serbisyong tinawag Magtanong DesdeLinux upang matulungan ka ng buong pamayanan sa iyong problema.
Isang yakap, Pablo.
magandang post
Ano ang utos bawat terminal upang magdagdag ng mga gawain sa crontab (nang hindi ipinasok ang crontab at manu-manong idagdag ang mga ito sa 'crontab -e' o palitan ang crontab ng isa pang crontab na may 'crontab file').
Ang ideya ay upang lumikha ng isang panlabas na script upang idagdag ang mga gawain sa crontab
Salamat
tila sa akin na maaari mong gamitin ang 'echo' kahit anong nais mong idagdag '| pusa >> 'cronotab path (/ etc / cronotab)' «
Paano tatakbo ang isang expression tuwing 3 araw nang eksakto
Hello.
Mayroon akong problema sa pagpapatupad ng isang cron job.
Pinapatakbo ko ang sumusunod na gawain sa cronta -e:
01 * * * * root /home/user/script/mfile.sh
ngunit ang gawain ay hindi tapos na. Nasuri ko na ang myfile.sh ay may pahintulot sa pagpapatupad at ang gumagamit na nagpapatupad nito ay ugat.
Pinapatakbo ko ang parehong gawain sa / etc / crontab at pagkatapos i-restart ang serbisyo, hindi rin ito gagana para sa akin.
Ang nilalaman ng myfile.sh ay isang utos na nag-a-update ng isang DB at kung patakbuhin ko ito sa console gumagana ito.
anumang ideya kung ano ang maaaring problema?
Malamang na ang gumagamit ng database ay walang lahat ng mga pahintulot at kailangan mo munang i-export ang mga variable ng kapaligiran mula sa iyong database engine.
Halimbawa sa db2 ang linya na ito ay pupunta sa simula ng script
. / home / db2inst1 / sqllib / db2profile
Ang isa pang dahilan ay maaaring ang script ay nangangailangan ng koneksyon sa database, gawin ang koneksyon sa database sa loob ng script
Hindi ko alam na kailangan kong i-restart ang crond, nakikipaglaban ako rito saglit
Malalaman nila kung paano ipahiwatig na ang gawain ay pinapatakbo tuwing katapusan ng buwan, sa oras na nakasaad .. ang detalye ay hindi ko makakamit kung paano ko malalaman na tumatagal ang huling araw ng bawat buwan .. ??? Kailangan kong isulat ang mga ito isa-isa ngunit kapag dumating ang pagtatapos ng buwan ng Pebrero na ito ay biciesto ay kumplikado ito para sa akin ..
magandang araw!!
Paano ko titigilan ang proseso na isinasagawa sa crontab?
proseso * …………
Hindi kaya maaari mo akong tulungan? eu tenho um script ni minha na may-akda na hindi gagana nang walang crontab! Huwag gawin ang lahat ng mga pinahihintulutan, walang pribadong tukoy na cron o gumagamit na maaaring isagawa ito-halos walang nangyari! Nais kong malaman kung maaari mo akong tulungan, ilang iba pang mga bagay na hindi gumagana! Vlws
Paano mo mailalagay ang isang gawain upang patakbuhin ang bawat huling araw ng buwan (araw: 31-30-28)?
Tulad ng alam mo, ang utos ng su ay ginagamit upang baguhin ang gumagamit sa isang console. Kung gagamitin ko ang command su ganito: "iyong gumagamit" palitan ang gumagamit ngunit walang tamang mga setting ng "gumagamit", kung tatakbo ako bilang: "su - user" baguhin ang paglo-load ng user ng mga setting ng gumagamit. Sa cron ipinapahiwatig ko ang gumagamit, ngunit paano ko mai-load ang mga setting ng gumagamit na ito?
At kung gusto kong pigilan ito?
Hello,
Hindi ko alam kung ano ang ginagawa kong mali, ngunit sinusunod ko ang mga hakbang at walang naisakatuparan. Sinubukan ko:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * ugat / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
at wala naman. Hindi ito nagpapatupad ng anumang bagay. Na-reboot ko at lahat.
Maraming salamat sa inyo