![]() |
Lucaine publisert en stund siden utmerket opplæring om cron og crontab som jeg synes er verdt å dele. Cron er et slags tilsvar til planlagte oppgaver i Windows, bare at den håndteres fra terminalen. De som foretrekker et visuelt grensesnitt for å oppnå samme mål, kan se dette et annet element. |
Hva er Cron?
Navnet cron kommer fra gresk chronos som betyr "tid". På Unix-operativsystemet er cron en vanlig bakgrunnsprosessbehandling (daemon) som kjører prosesser eller skript med jevne mellomrom (for eksempel hvert minutt, dag, uke eller måned). Prosessene som må kjøres og tidspunktet de må kjøres er spesifisert i crontab-filen.
COMO verk
Cron-demonen starter fra /etc/rc.d/ o /etc/init.d avhengig av fordelingen. Cron løper i bakgrunnen, sjekker crontab-oppgavetabellen hvert minutt / etc / crontab o en / var / spole / cron på jakt etter oppgaver som skal utføres. Som bruker kan vi legge til kommandoer eller skript med oppgaver for å cron for å automatisere noen prosesser. Dette er nyttig for eksempel for å automatisere oppdateringen av et system eller et godt backupsystem.
Hva er Crontab?
Crontab er en enkel tekstfil som lagrer en liste over kommandoer som skal utføres på et tidspunkt spesifisert av brukeren. Crontab vil verifisere datoen og klokkeslettet skriptet eller kommandoen skal utføres, utførelsestillatelsene og det vil gjøre det i bakgrunnen. Hver bruker kan ha sin egen crontab-fil, faktisk / etc / crontab det antas å være rotbrukerens crontab-fil, når vanlige brukere (og til og med root) vil generere sin egen crontab-fil, vil vi bruke crontab-kommandoen.
Crontab er den enkleste måten å administrere cron-oppgaver på flerbruker-systemer, enten som en enkel systembruker eller rotbruker.
Bruke crontab
Vi begynner med et enkelt eksempel.
Vi skal automatisere oppdateringen av et system, for å eliminere det irriterende "Jeg må alltid oppdatere og det liker jeg ikke!"
Først og fremst skal vi lage et manus. Dette skriptet vil bli kalt av cron og vil inneholde alle instruksjonene vi vil at det skal gjøres, derfor er det nødvendig å teste det i flere tilfeller og på flere måter før du inkluderer det i cron, et enkelt oppdateringsskript som dette:
#! / bin / bash #skriptoppdateringseksempel #Velg distribusjonen din # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Fjern # fra distrolinjen. I tilfelle det er Ubuntu / Debian, begynner det med apt-get.
Vi lagrer skriptet som update.sh (f.eks. Skriptkatalog ditt hjem). Vi endrer utførelsestillatelsene for nevnte skript med:
chmod a + x ~ / scripts / update.sh
Vi kjører skriptet et par ganger for å bekrefte at alt går greit, vi endrer det som er nødvendig (det skal ikke inneholde feil, ellers vil cron bare gjenta en feil igjen og igjen). Nå for å legge til oppgaven i crontab.
Legg til oppgaver i crontab
Vi kjører utgaven av crontab med crontab -e, i noen distroer (som Ubuntu) gir det oss muligheten til å velge tekstredigereren vi ønsker, resten vi har igjen med vi. Crontab-filen vil se omtrent slik ut.
# mh dom mon dow brukerkommando
der:
- m tilsvarer det øyeblikket skriptet kjøres, varierer verdien fra 0 til 59
- h det nøyaktige tidspunktet, 24-timersformatet håndteres, verdiene varierer fra 0 til 23, med 0 som 12:00 XNUMX:XNUMX.
- gave refererer til dagen i måneden, for eksempel kan du spesifisere 15 hvis du vil kjøre hver 15. dag
- dow betyr ukedagen, den kan være numerisk (0 til 7, der 0 og 7 er søndag) eller de første 3 bokstavene på dagen: man, ti, ons, torsdag, fre, lørdag, sol.
- bruker definerer brukeren som skal utføre kommandoen, den kan være root eller en annen bruker så lenge de har tillatelse til å utføre skriptet.
- kommando refererer til kommandoen eller den absolutte banen til skriptet som skal utføres, eksempel: /home/usuario/scripts/update.sh, hvis det kaller et skript, må det være kjørbart
For å være tydelig forklarte noen få eksempler på cron-oppgaver:
15 10 * * * bruker /hjem / bruker / skripter / oppdatering.sh
Den kjører update.sh-skriptet klokka 10:15 hver dag
15 22 * * * bruker /hjem / bruker / skripter / oppdatering.sh
Den kjører update.sh-skriptet klokken 10 hver dag
00 10 * * 0 root apt-get -y oppdatering Rotbruker
Den kjører en oppdatering hver søndag klokka 10
45 10 * * sun root apt-get -y oppdatering
Rotbrukeren kjører en oppdatering hver søndag (søn) kl 10:45
30 7 20 11 * bruker /home/usuario/scripts/update.sh
20. november klokken 7:30 kjører brukeren skriptet
30 7 11 11 solbruker /home/usuario/scripts/pastel_con_velitas.sh
11. november klokka 7:30 og det er søndag, vil brukeren feire sysadminen min (det vil si meg)
01 * * * * bruker /home/usuario/scripts/molestorecordatorio.sh
En irriterende påminnelse hvert minutt hver time hver dag (IKKE anbefalt).
De kan fortsatt håndteres spesielle områder:
30 17 * * 1,2,3,4,5
5:30 på ettermiddagen hver dag fra mandag til fredag.
00 12 1,15,28 * *
Klokka 12 hver første, femtende og 28. i hver måned (ideell for lønn)
Hvis dette er forvirrende, må du håndtere crontab spesielle strenger for å definere disse områdene.
@reboot Kjør en gang, ved oppstart
@årlig kjører bare en gang i året: 0 0 1 1 *
@ hvert år det samme som @ årlig
@monthly kjører en gang i måneden, den første dagen: 0 0 1 * *
@weekly Weekly det første minuttet i den første timen i uken. 0 0 * * 0 ″.
@ daglig hver dag, klokken 12:00. 0 0 * * *
@ midnight same as @daily
@hourly i første minutt av hver time: 0 * * * *
Bruken er veldig enkel.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Sist men ikke minst:
Cron jobbadministrasjon
crontab-fil
Erstatt eksisterende crontab-fil med en brukerdefinert fil
crontab -e
Rediger brukerens crontab-fil, hver nye linje vil være en ny crontab-oppgave.
crontab-l
Liste over alle brukerens crontab-oppgaver
crontab -d
Slett brukerens crontab
crontab -c dir
Definerer brukerens crontab-katalog (dette må ha brukerens skrive- og utføre tillatelser)
crontab -u bruker
prefiks for å håndtere crontab av en annen bruker, eksempler:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u bruker
Dette verktøyet, som mange andre, kan sees nærmere og mer detaljert i:
Ugh ... litt forvirrende.
* / 30 mangler (i minuttsfeltet) som går hvert 30. minutt ...
Jeg skulle bare kommentere dette til jeg bestemte meg for å gå gjennom kommentarene 😀
Denne modifisereren er en veldig viktig informasjon og noe veldig nyttig.
Hei!
Akkurat nå tester jeg en konfigurasjon hvert 45. minutt.
* / 45 * * * *, og instruksjonene utføres 45 minutter hver time OG hver time. Det er å si:
Den kjører kl. 3:45, deretter kl. 4:00, 4:45, deretter 5:00, 5:45, 6:00, 6:45 og så videre.
Jeg har noe galt? Hva kan jeg gjøre for å lage det bare hvert 45. minutt, eller minst en gang på 45 minutter hver time?
Hei!
Akkurat nå tester jeg en konfigurasjon hvert 45. minutt.
* / 45 * * * *, og instruksjonene utføres 45 minutter hver time OG hver time. Det er å si:
Den kjører kl. 3:45, deretter kl. 4:00, 4:45, deretter 5:00, 5:45, 6:00, 6:45 og så videre.
Jeg har noe galt? Hva kan jeg gjøre for å lage det bare hvert 45. minutt, eller minst en gang på 45 minutter hver time?
Hei, informasjonen for å avklare hvordan cron fungerer er veldig nyttig.
Bytes
for *
Utmerket, takk for at du avklarte hvordan cron fungerer .. la oss legge litt hånd 🙂
Denne linjen, slik jeg forstår, vil bli utført kl 10, rett meg hvis jeg tar feil
Vel der står det 10:15
15 22 * * * bruker /hjem / bruker / skripter / oppdatering.sh
Hallo! veldig god info.
For å utføre et skript hver halvtime, vil linjen som skal legges til CronTab være: "30 * * * * root Scrip.sh" Riktig? Tusen takk!
Nei. Hvis jeg husker riktig, må du sette / 30 * * * * root Scrip.sh for det.
Det vil si, legg til / før 30.
Jubel! Paul.
Hei, jeg likte innlegget ditt, det er veldig komplett, men jeg ønsket å spørre deg om noe.
Jeg har problemer med denne kommandoen og en som "at".
Jeg vil kjøre et skript på et bestemt tidspunkt og sette
på -f /home/mi_user/Desk/script.sh 18:08 eksempel
og skriptet blir ikke utført på skjermen, det vil si i terminalen, kjøres det i bakgrunnen?
Og med cron skjer det samme med meg, jeg redigerer crontab-filen med "crontab -e"
på slutten legger jeg til denne linjen:
46 19 my_user /home/mi_user/Desk/script.sh
og det gjør ingenting, det viser ikke manuset.
Noen forslag? Tusen takk og beklager eventuelle ulemper dette medfører
For at terminalen skal vises, må du kanskje kjøre terminalen og sende skriptet som en parameter.
For eksempel:
lxterminal -e "my_user /home/mi_user/Desktop/script.sh"
Parameteren som skal brukes, kan variere avhengig av terminalemulatoren du bruker.
Jeg håper det fungerer.
Klem! Paul.
Bidraget blir satt pris på.
10 poeng !!
salu2!!
Tusen takk, det hjalp meg mye å avklare noen ting, total takk, for flere detaljer eller tvil om at jeg vil gå til MANSIDEN, gjentatte hilsener.
Onkel tusen takk, jeg har lest og testet eksemplene. tusen takk ... det er veldig forståelig. Jubel
Jeg brukte ubuntu Server 12.04.2 LTS, og den versjonen av crontab som jeg har, for å slette listen over brukerens jobber blir brukt, crontab -r (og -l, som denne håndboken sier). Visst er det spørsmål om versjoner.
På den annen side kjørte jeg en gang bare crontab, og denne typen la meg lage min egen eksekveringsfil, men dette var ikke den som ble utført. Den som kjører er den i / etc / crontab. kanskje noen vil bruke kommentaren.
PS (jeg søker med lokaliser og hvor er crontab, men den returnerte bare nevnte adresse og en annen fil som er kryptert, så hvis den som ble utført var den i / etc / crontab, men da jeg utførte crontab -e-kommandoen, så min ut med alle jobbene jeg hadde definert) hvor ble denne filen lagret '???? Hilsen. Jeg logger alltid på med root.
Utmerket, veldig nyttig !!!
Hei, jeg vil gjerne gjøre dette ………… «15 10 * * * root ifdown eth0»
det vil si at nettverkskortet på et bestemt tidspunkt er slått av ………… vel, jeg la det i crontab og det fungerte ikke …… .. hva skjer?
Saludos y gracias
Du savnet å definere "mon" etter tittelen "Legg til oppgaver i crontab"
Artikkelen er fortsatt fin, cron er ekstremt nyttig.
Hvor kult var det gode innlegget, spør meg
Hvis jeg vil holde oversikt over postene som er igjen etter utførelse av oppgaver, hvor kan jeg se det?
er decdir Jeg vil se historikken til handlingene som ble gjort tidligere i denne filen, og jeg vil se hvem som har endret den og datoen
takk
Jeg vil sjekke endringsloggen for dette
hvordan kan jeg gjøre det
takk
God morgen,
Jeg tror at i ubuntu-skriptet har du gjort en feil, du har satt ap-get -y oppgradering i stedet for apt-get -y oppgradering. (Du har lagt igjen en t).
En hilsen.
Slik er det også. Takk skal du ha!
Klem! Paul
Jeg vil vite hvordan du lager en cron-fil for å kunne spesifisere tidspunktet hver gang den kjøres, katalogen etc.
Takk for at du avklarte operasjonen og de grunnleggende kommandoene for cron, for å underholde deg selv litt.
Hver gang jeg leter etter informasjon om et hvilket som helst tema relatert til Gnu / Linux, går jeg rundt og rundt for alltid å finne i 90% av tilfellene den beste opplæringen i dette flotte samfunnet, jeg tror at fra nå av vil jeg begynne her og da andre steder.
Hilsen
Takk Sander! En klem! Paul.
dom = dag i måneden
dow = ukedag
det er lettere hvis du forbinder
Tusen takk, dette er veldig komplett og godt forklart.
Dette er det samme som OS-læreren min ga oss, jeg endrer ingenting, nå ser jeg hvorfor klassen er så dårlig .-. Vel, dette er det samme som lekser xD
Estimert,
Spørsmål, kan varigheten av en oppgave være begrenset?
For eksempel har jeg en oppgave som gjentar seg hvert 5. minutt, ved repetisjon hvis den oppgaven fortsatt er aktiv, la den drepe den og kjøre den igjen.
Takk,
Marcelo. -
Hei, Marcelo!
Jeg tror det ville være bedre om du reiser dette spørsmålet i vår spørsmålstjeneste Spør FromLinux slik at hele samfunnet kan hjelpe deg med problemet ditt.
En klem, Pablo.
bra innlegg.
Hva er kommandoen per terminal for å legge til oppgaver i crontab (uten å gå inn i crontab og legge dem manuelt med 'crontab -e' eller erstatte crontab med en annen crontab med 'crontab-fil').
Ideen er å lage et eksternt skript for å legge til oppgavene i crontab
Takk
det virker for meg at du kan bruke 'ekko' hva du vil legge til '| katt >> 'cronotab path (/ etc / cronotab)' «
Hvordan ville et uttrykk løpe hver 3. dag nøyaktig
Hei.
Jeg har problemer med å utføre en cron-jobb.
Jeg kjører følgende oppgave med cronta -e:
01 * * * * root /home/user/script/mfile.sh
men oppgaven er ikke gjort. Jeg har bekreftet at myfile.sh har kjøringstillatelse, og at brukeren som utfører den er root.
Jeg kjører samme oppgave i / etc / crontab, og etter at jeg har startet tjenesten på nytt, fungerer den ikke for meg heller.
Innholdet i myfile.sh er en kommando som oppdaterer en DB, og hvis jeg kjører den i konsollen, fungerer den.
noen anelse om hva problemet kan være?
Databasebrukeren har kanskje ikke alle tillatelsene, og du må først eksportere miljøvariablene fra databasemotoren.
For eksempel i db2 vil denne linjen gå til begynnelsen av skriptet
. / hjem / db2inst1 / sqllib / db2profile
En annen årsak kan være at skriptet krever tilkobling til databasen, koble til databasen i skriptet
Jeg visste ikke at jeg måtte starte crond på nytt, jeg hadde kjempet med dette en stund
De vil vite hvordan de skal indikere at oppgaven kjøres hver eneste måned, til det angitte tidspunktet .. detaljene er at jeg ikke kan oppnå hvordan jeg vet at det tar den siste dagen i hver måned .. ??? Jeg måtte skrive dem ned en etter en, men når slutten av februar måned kommer at det er mest mulig, er det komplisert for meg ..
god dag!!
Hvordan stopper jeg prosessen som utføres i crontab?
prosess * …………
Kan det være at du kan hjelpe meg? eu tenho um minha script forfattet som ikke fungerer no crontab! jб dei alle tillatelsene, ikke en spesifikk cron eller bruker som kan utføre det - det skjer ingenting! Jeg vil gjerne vite om du kan hjelpe meg, noen andre ting fungerer ikke cron! Vlws
Hvordan vil du sette en oppgave i gang hver siste dag i måneden (dager: 31-30-28)?
Som du vet brukes su-kommandoen til å endre bruker i en konsoll. Hvis jeg bruker kommandoen su således: "brukeren din" endrer bruker men uten de riktige innstillingene for "bruker", hvis jeg kjører su som: "su - bruker" endrer bruker ved å laste inn brukerinnstillingene. Med cron indikerer jeg brukeren, men hvordan laster jeg inn konfigurasjonen til denne brukeren?
Og hvis jeg vil stoppe det?
Hei,
Jeg vet ikke hva jeg gjør galt, men jeg følger trinnene og ingenting blir utført. Jeg har prøvd:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * root / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * rot usr / bin / test.sh
og ingenting i det hele tatt. Det utfører ikke noe. Jeg har startet om og alt.
tusen takk