Lucaine objavljeno pred nekaj časa odlična vadnica o cron in crontab ki se mi zdi vredno deliti. Cron je nekakšen ekvivalent načrtovanim opravilom v sistemu Windows, samo da se z njim upravlja s terminala. Tisti, ki raje vizualni vmesnik doseže isti cilj, lahko to vidijo drug predmet. |
Kaj je cron?
Ime cron izvira iz grškega chronos, kar pomeni "čas". V operacijskem sistemu Unix je cron običajen upravitelj procesov v ozadju (demon), ki v rednih intervalih izvaja procese ali skripte (na primer vsako minuto, dan, teden ali mesec). Procesi, ki jih je treba izvesti, in čas, ko jih je treba izvesti, so določeni v datoteki crontab.
Como dela
Demon cron se začne od /etc/rc.d/ o /etc/init.d odvisno od razporeditve. Cron deluje v ozadju, vsako minuto preveri tabelo nalog crontab / etc / crontab o en / var / spool / cron v iskanju nalog, ki jih je treba opraviti. Kot uporabnik lahko v cron dodamo ukaze ali skripte z nalogami za avtomatizacijo nekaterih procesov. To je na primer koristno za avtomatizacijo posodobitve sistema ali dobrega varnostnega sistema.
Kaj je zdravilo Crontab?
Crontab je preprosta besedilna datoteka, ki hrani seznam ukazov, ki jih je treba izvesti v času, ki ga določi uporabnik. Crontab bo preveril datum in uro, ko naj bo izveden skript ali ukaz, dovoljenja za izvajanje in bo to opravil v ozadju. Vsak uporabnik ima lahko svojo datoteko crontab, pravzaprav / etc / crontab domneva se, da je datoteka korenskega uporabnika crontab, ko pa običajni uporabniki (in celo root) želijo ustvariti lastno datoteko crontab, bomo uporabili ukaz crontab.
Crontab je najlažji način za upravljanje nalog cron v več uporabniških sistemih, bodisi kot preprost sistemski uporabnik ali korenski uporabnik.
Uporaba crontaba
Začnemo s preprostim primerom.
Avtomatizirali bomo posodobitev sistema in odpravili nadležno "Vedno moram posodabljati in mi to ni všeč!"
Najprej bomo naredili scenarij. Ta skript bo poklical cron in bo vseboval vsa navodila, ki jih želimo narediti, zato ga je treba preizkusiti v več primerih in na več načinov, preden ga vključite v cron, tako preprost skript za posodobitev, kot je ta:
#! / bin / bash # primer posodobitve skripta # izberite svojo distribucijo # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Odstranite # s svoje distribucijske črte. V primeru, da gre za Ubuntu / Debian, se začne z apt-get.
Skript shranimo kot update.sh (npr. Skripte shranite v vaš dom). Dovoljenja za izvajanje navedenega skripta spremenimo z:
chmod a + x ~ / scripts / update.sh
Skript izvedemo nekajkrat, da preverimo, ali vse deluje nemoteno, spremenimo, kar je potrebno (ne sme vsebovati napak, sicer bo cron napako ponavljal le znova in znova). Zdaj, da dodamo nalogo v naš crontab.
Dodajte naloge v crontab
Izvedbo crontaba zaženemo s crontab -e, v nekaterih distribucijah (kot je Ubuntu) pa imamo možnost, da izberemo urejevalnik besedil, ki ga želimo, ostalo nam ostane vi. Datoteka crontab bo videti nekako tako.
# mh uporabniški ukaz dom mon dow
kje:
- m ustreza minuti, ko bo skript izveden, vrednost se giblje od 0 do 59
- h natančen čas, se obravnava 24-urni format, vrednosti se gibljejo od 0 do 23, pri čemer je 0 12:00 polnoči.
- darilo se nanaša na dan v mesecu, na primer lahko določite 15, če želite zagnati vsakih 15 dni
- dow pomeni dan v tednu, lahko je številski (0 do 7, kjer sta 0 in 7 nedelja) ali prve 3 črke dneva v angleščini: pon, sreda, sreda, čet, pet, sobota, sonce.
- uporabnik definira uporabnika, ki bo izvršil ukaz, lahko je root ali drug uporabnik, če ima dovoljenja za izvajanje skripta.
- ukaz se nanaša na ukaz ali absolutno pot skripta, ki ga je treba izvesti, primer: /home/usuario/scripts/update.sh, če pokliče skript, mora biti izvedljiv
Da bi bili jasni, je pojasnjenih nekaj primerov nalog cron:
15 10 * * * uporabnik /home/user/scripts/update.sh
Vsak dan bo ob 10:15 zjutraj zagnal skript update.sh
15 22 * * * uporabnik /home/user/scripts/update.sh
Vsak dan bo ob 10:15 zagnal skript update.sh
00 10 * * 0 root apt-get -y posodobitev Root uporabnik
Posodobljeno bo vsako nedeljo ob 10:00
45 Posodobitev apt-get -y sončnega korena 10 * *
Root uporabnik bo objavil posodobitev vsako nedeljo (ne) ob 10:45
30 7 20 11 * uporabnik /home/usuario/scripts/updata.sh
20. novembra ob 7 bo uporabnik zagnal skript
30 7 11 11 uporabnik sonca /home/usuario/scripts/pastel_con_velitas.sh
11. novembra ob 7 in to je nedelja, bo uporabnik praznoval svojega sysadmina (torej mene)
01 * * * * uporabnik /home/usuario/scripts/molestorecordatorio.sh
Moteč opomnik vsako minuto vsake ure vsak dan (NE priporočljivo).
Z njimi je še vedno mogoče ravnati posebna območja:
30 17 * * 1,2,3,4,5
Ob 5 popoldan vsak dan od ponedeljka do petka.
00 12 1,15,28 * *
Ob 12. uri vsak prvi, petnajsti in 28. v mesecu (idealno za plačilne liste)
Če je to zmedeno, ročaj crontab posebni nizi za opredelitev teh obsegov.
@reboot Zaženi enkrat, ob zagonu
@letno deluje samo enkrat na leto: 0 0 1 1 *
@ letno enako kot @ leto
@monthly teče enkrat mesečno, prvi dan: 0 0 1 * *
@weekly Weekly prva minuta prve ure v tednu. 0 0 * * 0 ″.
@daily vsak dan, ob 12:00 AM 0 0 * * *
@ polnoči enako kot @daily
@ urno v prvi minuti vsake ure: 0 * * * *
Njegova uporaba je zelo preprosta.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Nenazadnje:
Cron upravljanje delovnih mest
crontab
Zamenjajte obstoječo datoteko crontab z uporabniško določeno datoteko
crontab -e
Uredite uporabnikovo datoteko crontab, vsaka nova vrstica bo nova naloga crontab.
crontab -l
Naštejte vse uporabnikove naloge crontab
crontab -d
Izbrišite uporabnikov crontab
crontab -c r
Določa uporabnikov imenik crontab (ta mora imeti uporabnikova dovoljenja za pisanje in izvajanje)
uporabnik crontab -u
predpono za obdelavo crontaba drugega uporabnika, primeri:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u uporabnik
To orodje, tako kot številna druga, je mogoče videti bolj poglobljeno in podrobneje v:
Uf ... nekoliko zmedeno.
* / 30 manjka (v polju minut), ki traja vsakih 30 minut ...
Samo to sem hotel komentirati, dokler se nisem odločil pregledati komentarjev 😀
Ta modifikator je zelo pomemben podatek in nekaj zelo koristnega.
Pozdravljeni!
Trenutno preizkušam konfiguracijo vsakih 45 minut.
* / 45 * * * *, in navodilo se izvaja v 45 minutah na vsako uro IN vsako uro. Se pravi:
Poteka ob 3:45, nato 4:00, 4:45, nato 5:00, 5:45, 6:00, 6:45 itd.
Nekaj imam narobe? Kaj lahko storim, da je to le vsakih 45 minut ali vsaj enkrat na 45 minut vsako uro.
Pozdravljeni!
Trenutno preizkušam konfiguracijo vsakih 45 minut.
* / 45 * * * *, in navodilo se izvaja v 45 minutah na vsako uro IN vsako uro. Se pravi:
Poteka ob 3:45, nato 4:00, 4:45, nato 5:00, 5:45, 6:00, 6:45 itd.
Nekaj imam narobe? Kaj lahko storim, da je to le vsakih 45 minut ali vsaj enkrat na 45 minut vsako uro.
Pozdravljeni super koristne informacije za razjasnitev delovanja crona.
Bytes
za *
Odlično, hvala, da ste razjasnili, kako deluje cron .. dajmo malo roke 🙂
Kolikor razumem, bo ta vrstica izvedena ob 10, popravite me, če se motim
No, tam piše 10:15
15 22 * * * uporabnik /home/user/scripts/update.sh
Zdravo! zelo dobre informacije.
Če želite skript izvajati vsake pol ure, bi bilo treba vrstico, ki jo želite dodati v CronTab: "30 * * * * root Scrip.sh" Pravilno? Najlepša hvala!
Ne. Če se prav spomnim, morate za to postaviti / 30 * * * * root Scrip.sh.
Se pravi, dodajte / pred 30.
Na zdravje! Paul.
Pozdravljeni, všeč mi je bil vaš prispevek, je zelo popoln, vendar sem vas želel nekaj vprašati.
Imam težave s tem ukazom in takim, kot je "at".
Želim zagnati skript ob določenem času in ga postaviti
na primeru -f /home/mi_user/Desktop/script.sh 18:08
in skript se ne izvaja na zaslonu, torej v terminalu, ali se izvaja v ozadju?
In s cron se zgodi isto, kar je, uredim datoteko crontab z "crontab -e"
na koncu dodam še to vrstico:
46 19 my_user /home/mi_user/Desk/script.sh
in ne naredi ničesar, ne prikaže scenarija.
Kakšen predlog? Najlepša hvala in se opravičujemo za morebitne nevšečnosti
Za prikaz terminala boste morda morali zagnati terminal in predati skript kot parameter.
Na primer:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Parameter, ki ga želite uporabiti, se lahko razlikuje glede na uporabljeni terminalski emulator.
Upam, da deluje.
Objem! Paul.
Prispevek je cenjen.
10 točk !!
pozdrav2 !!
Najlepša hvala, zelo mi je pomagalo razjasniti nekatere stvari, popolna hvala, za več podrobnosti ali vprašanja bom šel na STRAN ČLOVEK, ponovil pozdrav.
človek najlepša hvala, bral sem in preizkušal primere. najlepša hvala ... je zelo razumljivo. Na zdravje
Za brisanje seznama uporabniških opravil sem uporabil ubuntu Server 12.04.2 LTS in uporabljeno različico crontab, ki jo imam, crontab -r (in -l, kot piše v tem priročniku). Seveda gre za vprašanje različic.
Po drugi strani pa sem nekoč zagnal samo crontab in mi je to omogočil, da ustvarim svojo izvršilno datoteko, vendar se ta ni izvajala. Zažene se tista v / etc / crontab. morda bo kdo uporabil komentar.
PS (iskal sem z locate in whereis crontab, vendar je vrnil zgoraj omenjeni naslov in drugo datoteko, ki je šifrirana, tako da če je bila izvršena tista v / etc / crontab, a pri izvrševanju ukaza crontab -e se je pojavil moj z vsemi opravili, ki sem jih definiral), kje je bila shranjena ta datoteka '???? S spoštovanjem. Vedno se prijavim s root.
Odlično, zelo koristno !!!
Pozdravljeni, rad bi to naredil ………… «15 10 * * * root ifdown eth0»
to pomeni, da se ob določenem času omrežna kartica izklopi ………… no, dal sem jo v crontab in ni delovala ...... ..
Saludos y gracias
Pogrešali ste definicijo "pon" za naslovom "Dodajanje opravil v crontab"
Članek je še vedno lep, cron izjemno uporaben.
Kako kul je bila ta dobra objava, vprašajte me
Kje ga lahko vidim, če želim slediti zapisom, ki jih je pustilo izvajanje nalog?
je odločiti se, da želim videti zgodovino dejanj, izvedenih v preteklosti te datoteke, in videti, kdo jo je spremenil, ter datum
hvala
Želim preveriti zgodovino sprememb tega
kako lahko to storim
hvala
Dobro jutro,
Mislim, da ste v skriptu ubuntu naredili napako, namesto nadgradnje apt-get -y ste postavili nadgradnjo ap-get -y. (Pustili ste t).
Pozdrav.
Tako je tudi. Hvala vam!
Objem! Paul
Želim vedeti, kako ustvariti datoteko cron, da lahko določim čas, ko se izvede, imenik itd.
Hvala, ker ste razjasnili delovanje in osnovne ukaze za cron, zdaj pa se malo zabavajte.
Kadarkoli iščem informacije o kateri koli temi, povezani z Gnu / Linuxom, grem naokrog in v 90% primerov vedno najdem najboljšo vadnico v tej odlični skupnosti, mislim, da bom odslej začel tu in nato drugje.
pozdrav
Hvala Sander! Objem! Paul.
dom = dan v mesecu
dow = dan v tednu
lažje je, če se družiš
Najlepša hvala, zelo popolna in dobro razložena.
To je ista stvar, ki nam jo je dal moj učitelj OS, ničesar ne spreminjam, zdaj vidim, zakaj je razred tako slab .-. No, to je enako kot domača naloga xD
Spoštovani,
Poizvedba, ali je lahko trajanje naloge omejeno?
Na primer imam nalogo, ki se ponovi vsakih 5 minut, če je naloga še vedno aktivna, jo ubijte in zaženite znova.
Hvala,
Marcelo.-
Pozdravljeni, Marcelo!
Mislim, da bi bilo bolje, če bi to vprašanje postavili v naši klicni službi za vprašanja in odgovore Vprašajte DesdeLinux tako da vam lahko celotna skupnost pomaga pri težavi.
Objem, Pablo.
dobra objava.
Kakšen je ukaz na terminal, da dodate naloge v crontab (ne da bi vnesli crontab in jih ročno dodali s 'crontab -e' ali zamenjali crontab z drugim crontabom z 'crontab file').
Ideja je ustvariti zunanji skript za dodajanje nalog v crontab
hvala
zdi se mi, da bi lahko uporabil 'echo', kar bi rad dodal '| mačka >> 'pot kronotaba (/ etc / cronotab)' «
Kako bi izraz tekel natančno vsake 3 dni
Hej.
Imam težavo pri izvajanju posla cron.
S cronta -e zaženem naslednjo nalogo:
01 * * * * root /home/user/script/mfile.sh
vendar naloga ni končana. Preveril sem, da ima myfile.sh dovoljenje za izvajanje in da je uporabnik, ki ga izvaja, root.
Isto nalogo zaženem v / etc / crontab in po ponovnem zagonu storitve tudi pri meni ne deluje.
Vsebina myfile.sh je ukaz, ki posodobi DB in če jo zaženem v konzoli, deluje.
sploh veste, v čem je težava?
Verjetno uporabnik baze podatkov nima vseh dovoljenj in boste najprej morali izvesti spremenljivke okolja iz mehanizma baze podatkov.
Na primer v db2 bo ta vrstica šla na začetek skripta
. / home / db2inst1 / sqllib / db2profile
Drug vzrok bi lahko bil, da skript zahteva povezavo z bazo podatkov, povezavo z bazo podatkov pa izvedite v skriptu
Nisem vedel, da moram znova zagnati crond, že nekaj časa sem se boril s tem
Vedeli bodo, kako se bo naloga izvajala vsak konec meseca ob navedenem času .. podrobnost je, da ne morem doseči, kako vem, da je zadnji dan vsakega meseca .. ??? Moral sem jih zapisovati enega za drugim, ko pa pride konec meseca februarja, da je biciesto, je zame zapleteno.
dober dan!!
Kako ustavim postopek, ki se izvaja v crontabu?
postopek * …………
Ali mi lahko pomagaš? eu tenho um script avtor Minha, ki ne deluje noben crontab! jб dei vse pravice, noben zasebni cron ali uporabnik, ki bi ga lahko izvedel - skoraj nič se ne zgodi! Zanima me, če mi lahko pomagate, nekatere druge stvari ne delujejo! Vlws
Kako bi postavili nalogo, da se izvaja vsak zadnji dan v mesecu (dnevi: 31–30–28)?
Kot veste, se ukaz su uporablja za spreminjanje uporabnika v konzoli. Če uporabim ukaz su tako: "vaš uporabnik" spremeni uporabnika, vendar brez ustreznih nastavitev "uporabnik", če zaženem su kot: "su - uporabnik", spremenite uporabnika tako, da naložite uporabniške nastavitve. S cron označim uporabnika, kako pa naložim konfiguracije tega uporabnika?
In če ga želim ustaviti?
Pozdravljeni,
Ne vem, kaj delam narobe, vendar sledim korakom in nič se ne izvrši. Poskusil sem:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * root usr / bin / test.sh
in prav nič. Ne izvrši ničesar. Ponovno sem zagnal in vse.
najlepša hvala