Lukain eldonita antaŭ kelka tempo bonega lernilo pri cron kaj crontab tion mi opinias inda dividi. Cron estas speco de ekvivalento al Planitaj Taskoj en Vindozo, nur ke ĝi estas pritraktita de la terminalo. Tiuj, kiuj preferas vidan interfacon por atingi la saman celon, povas vidi ĉi tion alia ero. |
Indekso
Kio estas cron?
La nomo cron venas de la greka chronos, kiu signifas "tempo". En la operaciumo Unikso, cron estas regula fona procezadministrilo (demono), kiu administras procezojn aŭ skriptojn laŭ regulaj intervaloj (ekzemple, ĉiun minuton, tagon, semajnon aŭ monaton). La procezoj, kiuj devas esti plenumitaj kaj la tempo, kiam ili devas esti ekzekutitaj, estas specifitaj en la crontab-dosiero.
Kiel ĝi funkcias
La cron-demono komenciĝas de /etc/rc.d/ o /etc/init.d depende de la distribuo. Cron kuras en la fono, ĉiuminute kontrolas la krontab-taskotabelon / etc / crontab aŭ en / var / spool / cron serĉante plenumotajn taskojn. Kiel uzanto ni povas aldoni komandojn aŭ skriptojn kun taskoj al cron por aŭtomatigi iujn procezojn. Ĉi tio utilas ekzemple por aŭtomatigi la ĝisdatigon de sistemo aŭ bona rezerva sistemo.
Kio estas Crontab?
Crontab estas simpla teksta dosiero, kiu stokas liston de ordonoj plenumotaj en tempo difinita de la uzanto. Crontab kontrolos la daton kaj tempon kiam la skripto aŭ komando devas esti plenumita, la ekzekutaj permesoj kaj ĝi faros ĝin en la fono. Ĉiu uzanto povas havi sian propran crontab-dosieron, fakte la / etc / crontab ĝi estas supozata kiel la krontab-dosiero de la radikuzanto, kiam normalaj uzantoj (kaj eĉ radiko) volas generi sian propran krontab-dosieron, tiam ni uzos la komandon crontab
Crontab estas la plej facila maniero administri cron-taskojn sur pluruzantaj sistemoj, ĉu kiel simpla sistemuzanto aŭ radikuzanto.
Uzante crontab
Ni komencas kun simpla ekzemplo.
Ni aŭtomatigos la ĝisdatigon de sistemo, por forigi la ĝenan "Mi ĉiam devas ĝisdatigi kaj mi ne ŝatas tion!"
Unue ni faros skripton. Ĉi tiu skripto estos vokita de cron kaj enhavos ĉiujn instrukciojn, kiujn ni volas, ke ĝi faru, tial necesas testi ĝin plurfoje kaj plurmaniere antaŭ ol inkluzivi ĝin en cron, simpla ĝisdatiga skripto kiel ĉi tiu:
#! / bin / bash #script update example # elekti vian distribuon # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Forigu la # de via distro-linio. Se temas pri Ubuntu / Debian, ĝi komenciĝas per apt-get.
Ni konservas la skripton kiel update.sh (ekz. Skripta dosierujo via hejmo). Ni ŝanĝas la ekzekutajn permesojn de la menciita skripto per:
chmod a + x ~ / scripts / update.sh
Ni plenumas la skripton kelkajn fojojn por kontroli, ke ĉio funkcias glate, ni modifas tion, kio necesas (ĝi ne devas enhavi erarojn, alie cron nur ripetos eraron ree). Nun aldonu la taskon al nia crontab.
Aldoni taskojn al crontab
Ni ekzekutas la eldonon de la crontab kun crontab -e, en iuj distribuoj (kiel Ubuntu) ĝi donas al ni la eblon elekti la tekstredaktilon, kiun ni volas, la reston ni restas kun vi. La crontab-dosiero aspektos tiel.
# mh dom mon dow uzanto komando
kie:
- m egalas al la minuto, kiam la skripto estos plenumita, la valoro varias de 0 ĝis 59
- h la ĝusta horo, la 24-hora formato estas pritraktita, la valoroj varias de 0 ĝis 23, kun 0 estante 12:00 noktomeze.
- dom rilatas al la monatotago, ekzemple vi povas specifi 15 se vi volas kuri ĉiun 15 tagojn
- dow signifas la semajnotagon, ĝi povas esti nombra (0 ĝis 7, kie 0 kaj 7 estas dimanĉo) aŭ la unuaj 3 literoj de la tago en la angla: mon, mar, wed, thu, fri, sat, sun.
- surhavi difinas la uzanton, kiu plenumos la komandon, ĝi povas esti root aŭ alia uzanto kondiĉe ke ili havas permesojn ekzekuti la skripton.
- komando rilatas al la komando aŭ la absoluta vojo de la plenumota skripto, ekzemple: /home/usuario/scripts/update.sh, se ĝi ja nomas skripton, ĝi devas esti plenumebla
Por esti klaraj kelkaj ekzemploj de cron-taskoj klarigitaj:
15 10 * * * uzanto /home/user/scripts/update.sh
Ĝi lanĉos la skripton update.sh je 10:15 a.m. ĉiutage
15 22 * * * uzanto /home/user/scripts/update.sh
Ĝi lanĉos la script update.sh je 10:15 ĉiutage
00 10 * * 0 radika apt-get -y ĝisdatigo Radika uzanto
Ĝi lanĉos ĝisdatigon ĉiun dimanĉon je 10:00 a.m.
45 10 * * sunradika apt-get -y ĝisdatigo
Radika uzanto lanĉos ĝisdatigon ĉiun dimanĉon (Suno) je 10:45 a.m.
30 7 20 11 * uzanto /home/usuario/scripts/update.sh
La 20an de novembro je la 7:30 la uzanto funkciigos la skripton
30 7 11 11 sunuzanto /home/usuario/scripts/pastel_con_velitas.sh
La 11an de novembro je la 7a30 kaj dimanĉe, la uzanto festos sian administranton (tio estas, mi)
01 * * * * uzanto /home/user/scripts/molestorecordatorio.sh
Ĝena memorigilo ĉiun minuton de ĉiu horo ĉiutage (NE rekomendinda).
Ili ankoraŭ povas esti pritraktitaj specialaj gamoj:
30 17 * * 1,2,3,4,5
Je la 5:30 posttagmeze ĉiutage de lundo ĝis vendredo.
00 12 1,15,28 **
Je la 12a tagmeze ĉiu unua, dekkvina kaj 28a de ĉiu monato (ideala por etato)
Se ĉi tio estas konfuza, krontab-teniloj specialaj ĉenoj por difini ĉi tiujn gamojn.
@ reboot Kuru unufoje, ĉe ekfunkciigo
@jare funkcias nur unufoje jare: 0 0 1 1 *
@jare same kiel @jare
@monate funkcias unufoje monate, la unua tago: 0 0 1 * *
@Welyly Weekly la unua minuto de la unua horo de la semajno. 0 0 * * 0 ″.
@ ĉiutage ĉiutage, je 12:00 a.m. 0 0 * * *
@midnight same kiel @ ĉiutage
@hore je la unua minuto de ĉiu horo: 0 * * * *
Ĝia uzo estas tre simpla.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @ ĉiutaga radiko apt-get update && apt-get -y upgrade
Laste sed ne malpli grave:
Cron-laborpostenado
crontab-dosiero
Anstataŭigu la ekzistantan crontab-dosieron per uzanto-difinita dosiero
crontab -e
Redaktu la dosieron de la uzanto, ĉiu nova linio estos nova tasko.
crontab -l
Enlistigu ĉiujn taskojn de la uzanto
crontab -d
Forigu la krontabulon de la uzanto
crontab -c dir
Difinas la dosierujon de la uzanto (ĉi tio devas havi la rajtojn de la uzanto skribi kaj plenumi)
crontab -u uzanto
prefikso por pritrakti krontabon de alia uzanto, ekzemploj:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u user
Ĉi tiu ilo, kiel multaj aliaj, videblas pli profunde kaj pli detale en:
48 komentoj, lasu la viajn
Uf ... iom konfuza.
* / 30 mankas (en la kampo minutoj), kiu ruliĝas ĉiun 30 minutojn ...
Ĝuste ĉi tion mi intencis komenti ĝis mi decidis revizii la komentojn 😀
Ĉi tiu modifilo estas tre grava informo kaj io tre utila.
Hola!
Ĝuste nun mi provas agordon ĉiun 45 minutojn.
* / 45 * * * *, kaj la instrukcio plenumiĝas je 45 minutoj de ĉiu horo KAJ ĉiu horo. Alivorte:
Ĝi funkcias je 3:45, poste 4:00, 4:45, tiam 5:00, 5:45, 6:00, 6:45, ktp.
Mi havas ion malĝustan? Kion mi povas fari por ke ĝi estu nur ĉiu 45 minutoj, aŭ almenaŭ unufoje po 45 minutoj ĉiu horo.
Hola!
Ĝuste nun mi provas agordon ĉiun 45 minutojn.
* / 45 * * * *, kaj la instrukcio plenumiĝas je 45 minutoj de ĉiu horo KAJ ĉiu horo. Alivorte:
Ĝi funkcias je 3:45, poste 4:00, 4:45, tiam 5:00, 5:45, 6:00, 6:45, ktp.
Mi havas ion malĝustan? Kion mi povas fari por ke ĝi estu nur ĉiu 45 minutoj, aŭ almenaŭ unufoje po 45 minutoj ĉiu horo.
Saluton tre utila la informo por klarigi kiel cron funkcias.
Bajtoj
por *
Bonege, dankon por klarigi kiel cron funkcias. Ni metu iom da mano 🙂
Ĉi tiu linio, laŭ mia kompreno, estos plenumita je 10:15, korektu min se mi eraras
Nu tie ĝi diras 10:15 a.m.
15 22 * * * uzanto /home/user/scripts/update.sh
Saluton! tre bona informo.
Por plenumi Skripton ĉiun duonhoron, la linio aldonota al CronTab estus: "30 * * * * root Scrip.sh" Ĉu korekte? Multan dankon!
Ne. Se mi bone memoras, vi devas meti / 30 * * * * root Scrip.sh.
Tio estas, aldonu la / antaŭ 30.
Saluton! Paŭlo.
Saluton, mi ŝatis vian afiŝon, ĝi estas tre kompleta sed mi volis demandi al vi ion.
Mi havas problemojn kun ĉi tiu komando kaj unu kiel "ĉe".
Mi volas ekzekuti skripton en certa tempo kaj mi metas
ĉe -f /home/mi_user/Desk/script.sh 18:08 ekzemplo
kaj la skripto ne estas ekzekutita sur la ekrano, do en la fina stacio, ĉu ĝi estas ekzekutita en la fono?
Kaj kun cron la samo okazas al mi, mi redaktas la crontab-dosieron per "crontab -e"
fine mi aldonas ĉi tiun linion:
46 19 mia_uzanto /hejme/mi_uzanto/Desk/script.sh
kaj ĝi faras nenion, ĝi ne montras la skripton.
Iu sugesto? Koran dankon kaj pardonpetu pro ia ĝeno
Por ke la terminalo aperu, vi eble devos ruli la terminalon kaj pasigi la skripton kiel parametron.
Ekzemple:
lxterminal -e "mia_uzanto /hejme/mia_uzanto/Desk/script.sh"
La parametro uzota povas varii laŭ la fina emulilo, kiun vi uzas.
Mi esperas, ke ĝi funkcios.
Brakumo! Paŭlo.
La kontribuo estas dankita.
10 poentoj !!
saluton2 !!
Koran dankon, ĝi multe helpis min klarigi iujn aferojn, tutajn dankojn, por pli da detaloj aŭ demandoj mi iros al la MAN-PAĜO, ripetis salutojn.
Onklo tre dankas min, mi legis kaj testis la ekzemplojn. dankegon ... ĝi estas tre komprenebla. Saluton
Mi uzis ubuntu-servilon 12.04.2 LTS, kaj la versio de crontab, kiun mi havas, por forigi la liston de la laborpostenoj de la uzanto, estas uzata, crontab -r (kaj -l, kiel diras ĉi tiu manlibro). Certe temas pri versioj.
Aliflanke, mi iam funkciigis nur crontab kaj ĉi tia permesis al mi krei mian propran ekzekutan dosieron, sed ĉi tiu ne estis tiu, kiu estis ekzekutita. Kiu ruliĝas estas tiu en / etc / crontab. eble iu uzos la komenton.
PS (mi serĉis per lokalizado kaj kie estas krontab sed ĝi nur redonis la menciitan adreson kaj alian dosieron ĉifritan, do se tiu ekzekutita estis tiu en / etc / crontab, sed kiam plenumis la komandon crontab -e, mia aperis kun ĉiuj laboroj, kiujn mi difinis) kie estis konservita ĉi tiu dosiero '???? Salutojn. Mi ĉiam ensalutas per radiko.
Bonega, tre utila !!!
Saluton, mi ŝatus fari ĉi tion ………… «15 10 * * * root ifdown eth0»
tio signifas, ke en certa tempo la retkarto estas malŝaltita ... nu, mi metis ĝin en la kruntab kaj ĝi ne funkciis ... ... kio okazas?
Saluton kaj dankon
Vi maltrafis difini "mon" post la titolo "Aldoni taskojn al crontab"
La artikolo estas ankoraŭ bela, cron estas ege utila.
Kiel mojosa estis tiu bona afiŝo, demandu min
Se mi volas spuri la registrojn lasitajn de la plenumo de taskoj, kie mi povas vidi ĝin?
estas decdir Mi volas vidi la historion de la agoj faritaj en la pasinteco de ĉi tiu dosiero kaj mi volas vidi kiu modifis ĝin kaj la daton
gracias
Mi volas kontroli la modifan historion de ĉi tio
kiel mi povas fari ĝin
gracias
Bona dias,
Mi pensas, ke en la ubuntu-skripto vi faris eraron, vi metis ap-get -y upgrade anstataŭ apt-get -y upgrade. (Vi lasis t).
Un saluto.
Tiel estas. Dankon!
Brakumo! Paŭlo
Mi volas scii kiel krei cron-dosieron por povi specifi la tempon kiam ĝi estas plenumita, la dosierujo ktp.
Dankon pro klarigi la operacion kaj la bazajn komandojn por cron, nun por distri vin iomete.
Ĉiam, kiam mi serĉas informojn pri iu ajn temo rilate al Gnu / Linukso, mi rondiras por ĉiam trovi en 90% de la kazoj la plej bonan lernilon en ĉi tiu bonega komunumo, mi pensas, ke de nun mi komencos jen kaj jen aliloke.
salutoj
Dankon Sander! Brakumon! Paŭlo.
dom = tago de monato
dow = tago de semajno
estas pli facile se vi asocias
Koran dankon, tre kompletan kaj bone klarigitan.
Ĉi tio estas la sama afero, kiun donis al ni mia OS-instruisto, mi ŝanĝas nenion, nun mi vidas kial la klaso estas tiel malbona.
Taksita,
Demando, ĉu la tempodaŭro de tasko povas esti limigita?
Ekzemple mi havas taskon, kiu ripetas ĉiujn 5 minutojn, ripetante se tiu tasko ankoraŭ aktivas, mortigu ĝin kaj rulu denove.
Dankon,
Marcelo.-
Saluton, Marcelo!
Mi pensas, ke estus pli bone se vi starigus ĉi tiun demandon en nia nomita servo por demandoj kaj respondoj Demandu DeLinux por ke la tuta komunumo povu helpi vin pri via problemo.
Brakumon, Pablo.
bona afiŝo.
Kio estas la komando po fina stacio por aldoni taskojn al la crontab (sen eniri la crontab kaj aldoni ilin permane per 'crontab -e' aŭ anstataŭigi la crontab per alia crontab per 'crontab-dosiero').
La ideo estas krei eksteran skripton por aldoni la taskojn al la crontab
danke
ŝajnas al mi, ke vi povus uzi 'eoon' kion ajn vi volas aldoni '| kato >> 'cronotab-vojo (/ etc / cronotab)' «
Kiel esprimo funkcius ekzakte ĉiun 3 tagojn
Saluton.
Mi havas problemon plenumi cron-laboron.
Mi plenumas la jenan taskon per cronta -e:
01 * * * * root /home/user/script/mfile.sh
sed la tasko ne plenumiĝis. Mi kontrolis, ke myfile.sh havas ekzekutan permeson kaj ke la uzanto, kiu plenumas ĝin, estas root.
Mi plenumas la saman taskon en / etc / crontab kaj post rekomencado de la servo, ĝi ankaŭ ne funkcias por mi.
La enhavo de myfile.sh estas komando, kiu ĝisdatigas DB kaj se mi funkciigas ĝin en la konzolo, ĝi funkcias.
iu ideo, kia povas esti la problemo?
La uzanto de datumbazo eble ne havas ĉiujn permesojn kaj vi unue devos eksporti la ĉirkaŭajn variablojn de via datumbaza motoro.
Ekzemple en db2, ĉi tiu linio irus al la komenco de la skripto
. / home / db2inst1 / sqllib / db2profile
Alia kaŭzo povus esti, ke la skripto postulas konekton al la datumbazo, faru la ligon al la datumbazo ene de la skripto
Mi ne sciis, ke mi devas rekomenci la krondon, mi batalas kun ĉi tio dum kelka tempo
Ili scios kiel indiki, ke la tasko funkcias ĉiun finon de la monato, en la horo indikita .. la detalo estas, ke mi ne povas atingi kiel mi scias, ke ĝi daŭras la lastan tagon de ĉiu monato .. ??? Mi devis noti ilin unu post la alia, sed kiam la fino de la monato februaro venas, ke ĝi estas biciesto, ĝi estas komplika ...
bonan tagon!!
Kiel mi haltigas la procezon, kiu estas ekzekutita en la crontab?
procezo * …………
Ĉu eble vi povas helpi min? eu tenho um-skripto de minha verkita, kiu ne funkcias, ne krontab! Ĉu ĉiuj permesiloj, ne specifa cron aŭ uzanto kapablaj plenumi ĝin - plej nenio okazas! Mi ŝatus scii ĉu vi povas helpi min, iuj aliaj aferoj funkcias sen cron! Vlws
Kiel vi metus taskon funkcii ĉiun lastan tagon de la monato (tagoj: 31-30-28)?
Kiel vi scias, la su-komando estas uzata por ŝanĝi uzanton en konzolo. Se mi uzas la komandon su tiel: "via uzanto" ŝanĝas uzanton sed sen la taŭgaj agordoj de "uzanto", se mi uzas su kiel: "su - uzanto" ŝanĝu uzanton ŝarĝante la agordojn de uzanto. Kun cron mi indikas la uzanton, sed kiel mi ŝarĝas la agordojn de ĉi tiu uzanto?
Kaj se mi volas ĉesigi ĝin?
saluton,
Mi ne scias, kion mi faras malbone, sed mi sekvas la paŝojn kaj nenio estas efektivigita. Mi provis:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * radiko usr / bin / test.sh
kaj nenio entute. Ĝi nenion efektivigas. Mi rekomencis kaj ĉion.
Dankegon