Lucaine han offentliggjorde et stykke tid siden fremragende tutorial om cron og crontab som jeg synes er værd at dele. Cron svarer til en plan svarende til planlagte opgaver i Windows, kun at det håndteres fra terminalen. De, der foretrækker en visuel grænseflade for at nå det samme mål, kan se dette en anden artikel. |
Hvad er Cron?
Navnet cron kommer fra den græske chronos, hvilket betyder "tid". I Unix-operativsystemet er cron en regelmæssig baggrundsprocessmanager (dæmon), der kører processer eller scripts med jævne mellemrum (for eksempel hvert minut, dag, uge eller måned). De processer, der skal udføres, og det tidspunkt, hvor de skal udføres, er specificeret i crontab-filen.
Como værker
Cron-dæmonen starter fra /etc/rc.d/ o /etc/init.d afhængigt af fordelingen. Cron løber i baggrunden, kontrollerer crontab-opgavetabellen hvert minut / Etc / crontab eller / var / spole / cron på jagt efter opgaver, der skal udføres. Som bruger kan vi tilføje kommandoer eller scripts med opgaver til cron for at automatisere nogle processer. Dette er f.eks. Nyttigt at automatisere opdateringen af et system eller et godt backupsystem.
Hvad er Crontab?
Crontab er en simpel tekstfil, der gemmer en liste over kommandoer, der skal udføres på et tidspunkt, der er angivet af brugeren. Crontab vil kontrollere datoen og klokkeslættet, som scriptet eller kommandoen skal udføres, udførelsestilladelserne, og det gør det i baggrunden. Hver bruger kan have deres egen crontab-fil, faktisk / Etc / crontab det antages at være rodbrugerens crontab-fil, når normale brugere (og endda root) vil generere deres egen crontab-fil, så bruger vi kommandoen crontab.
Crontab er den nemmeste måde at styre cron-opgaver på multi-user-systemer på, enten som en simpel systembruger eller root-bruger.
Brug af crontab
Vi starter med et simpelt eksempel.
Vi vil automatisere opdateringen af et system for at fjerne det irriterende ved "Jeg skal altid opdatere, og det kan jeg ikke lide!"
Først og fremmest laver vi et script. Dette script kaldes af cron og indeholder alle de instruktioner, vi vil have det til at gøre, derfor er det nødvendigt at teste det i flere tilfælde og på flere måder, før det inkluderes i cron, et simpelt opdateringsscript som dette:
#! / bin / bash #script-opdateringseksempel #Vælg din distribution # debian-ubuntu # apt-get update & apt-get -y upgrade #fedora #yum -y update #Arch #pacman --noconfirm -Syu
Fjern # fra din distrolinje. Hvis det er Ubuntu / Debian, starter det med apt-get.
Vi gemmer scriptet som update.sh (f.eks. Scriptsmappe dit hjem). Vi ændrer udførelsestilladelserne for det nævnte script med:
chmod a + x ~ / scripts / update.sh
Vi kører scriptet et par gange for at kontrollere, at alt kører problemfrit, vi ændrer det, der er nødvendigt (det må ikke indeholde fejl, hvis ikke cron kun gentager en fejl igen og igen). Nu for at tilføje opgaven til vores crontab.
Føj opgaver til crontab
Vi udfører udgaven af crontab med crontab -e, i nogle distroer (som f.eks. Ubuntu) giver det os mulighed for at vælge den teksteditor, vi ønsker, resten har vi tilbage med vi. Crontab-filen vil se sådan ud.
# mh dom mon dow brugerkommando
hvor:
- m svarer til det øjeblik scriptet udføres, værdien varierer fra 0 til 59
- h det nøjagtige tidspunkt, 24-timers format håndteres, værdierne varierer fra 0 til 23, hvor 0 er 12:00 midnat.
- gave refererer til månedsdagen, for eksempel kan du angive 15, hvis du vil køre hver 15. dag
- dow betyder ugedagen, det kan være numerisk (0 til 7, hvor 0 og 7 er søndag) eller de første 3 bogstaver på dagen på engelsk: man, ti, ons, tors, fre, lør, sol.
- bruger definerer den bruger, der udfører kommandoen, den kan være root eller en anden bruger, så længe de har tilladelse til at udføre scriptet.
- kommando henviser til kommandoen eller den absolutte sti til det script, der skal udføres, eksempel: /home/usuario/scripts/update.sh, hvis det kalder et script, skal det være eksekverbart
For at være klar et par eksempler på cron-opgaver forklaret:
15 10 * * * bruger /home/bruger/scripts/update.sh
Det kører scriptet update.sh kl. 10:15 hver dag
15 22 * * * bruger /home/bruger/scripts/update.sh
Det kører scriptet update.sh kl. 10:15 hver dag
00 10 * * 0 root apt-get -y opdatering Root user
Den kører en opdatering hver søndag kl. 10
45 10 * * sun root apt-get -y opdatering
Rodbrugeren kører en opdatering hver søndag (søn) kl. 10:45
30 7 20 11 * bruger /home/usuario/scripts/update.sh
Den 20. november kl. 7:30 kører brugeren scriptet
30 7 11 11 solbruger /home/usuario/scripts/pastel_con_velitas.sh
Den 11. november kl. 7:30, og det er søndag, fejrer brugeren sin sysadmin (det vil sige mig)
01 * * * * bruger /home/usuario/scripts/molestorecordatorio.sh
En irriterende påmindelse hvert minut hver time hver dag (IKKE anbefales).
De kan stadig håndteres specielle intervaller:
30 17 * * 1,2,3,4,5
5:30 om eftermiddagen hver dag fra mandag til fredag.
00 12 1,15,28 * *
Kl. 12 hver første, femtende og 28. i hver måned (ideel til lønningsliste)
Hvis dette er forvirrende, skal du håndtere crontab specielle strenge til at definere disse intervaller.
@reboot Kør én gang ved opstart
@yearly kører kun en gang om året: 0 0 1 1 *
@ hvert år det samme som @ årligt
@monthly kører en gang om måneden, den første dag: 0 0 1 * *
@ ugentlig ugentlig det første minut i den første times uge. 0 0 * * 0 ″.
@ dagligt dagligt kl. 12:00 0 0 * * *
@ midnat samme som @daily
@hourly i det første minut i hver time: 0 * * * *
Dens anvendelse er meget enkel.
@hourly user /home/user/scripts/molestorecordatorio.sh @monthly user /home/user/scripts/backup.sh @daily root apt-get update && apt-get -y upgrade
Sidst men ikke mindst:
Cron jobledelse
crontab-fil
Udskift den eksisterende crontab-fil med en brugerdefineret fil
crontab -e
Rediger brugerens crontab-fil, hver nye linje bliver en ny crontab-opgave.
crontab-l
Liste over alle brugerens crontab-opgaver
crontab -d
Slet brugerens crontab
crontab -c dir
Definerer brugerens crontab-bibliotek (dette skal have brugerens skrive- og eksekveringstilladelser)
crontab -u bruger
præfiks til at håndtere en anden brugers crontab, eksempler:
$ sudo crontab -l -u root $ sudo crontab -e user2 #crontab -d -u bruger
Dette værktøj kan, som mange andre, ses mere detaljeret og mere detaljeret i:
Ugh ... lidt forvirrende.
* / 30 mangler (i minutfeltet), der kører hvert 30. minut ...
Jeg skulle bare kommentere dette, indtil jeg besluttede at gennemgå kommentarerne 😀
Denne modifikator er et meget vigtigt stykke information og noget meget nyttigt.
Hej!
Lige nu tester jeg en konfiguration hvert 45. minut.
* / 45 * * * *, og instruktionen udføres i 45 minutter hver time OG hver time. Det vil sige:
Den kører kl. 3:45, derefter 4:00, 4:45, derefter 5:00, 5:45, 6:00, 6:45 osv.
Jeg har noget galt? Hvad kan jeg gøre, så det kun er hvert 45. minut eller mindst en gang med 45 minutter hver time?
Hej!
Lige nu tester jeg en konfiguration hvert 45. minut.
* / 45 * * * *, og instruktionen udføres i 45 minutter hver time OG hver time. Det vil sige:
Den kører kl. 3:45, derefter 4:00, 4:45, derefter 5:00, 5:45, 6:00, 6:45 osv.
Jeg har noget galt? Hvad kan jeg gøre, så det kun er hvert 45. minut eller mindst en gang med 45 minutter hver time?
Hej super nyttige oplysningerne for at afklare, hvordan cron fungerer.
Bytes
til *
Fremragende, tak for at afklare, hvordan cron fungerer .. lad os lægge en lille hånd 🙂
Denne linje, som jeg forstår den, vil blive udført kl. 10:15, korriger mig, hvis jeg tager fejl
Nå der står der 10:15
15 22 * * * bruger /home/bruger/scripts/update.sh
Hej! meget god info.
For at udføre et script hver halve time ville linjen, der skulle føjes til CronTab, være: "30 * * * * root Scrip.sh" Korrekt? Mange tak!
Nej. Hvis jeg husker rigtigt, skal du til det sætte / 30 * * * * root Scrip.sh.
Det vil sige tilføje / før 30.
Skål! Paul.
Hej Jeg kunne godt lide dit indlæg, det er meget komplet, men jeg vil gerne spørge dig om noget.
Jeg har problemer med denne kommando og en som "at".
Jeg vil køre et script på et bestemt tidspunkt og sætte det
på -f /home/mi_user/Desk/script.sh 18:08 eksempel
og scriptet udføres ikke på skærmen, det vil sige i terminalen, udføres det i baggrunden?
Og med cron sker det samme med mig, jeg redigerer crontab-filen med "crontab -e"
i slutningen tilføjer jeg denne linje:
46 19 my_user /home/mi_user/Desk/script.sh
og det gør ingenting, det viser ikke scriptet.
Nogle forslag? Mange tak og undskyld for ulejligheden
For at terminalen vises, skal du muligvis køre terminalen og videregive scriptet som en parameter.
For eksempel:
lxterminal -e "my_user /home/my_user/Desk/script.sh"
Parameteren, der skal bruges, kan variere afhængigt af den terminalemulator, du bruger.
Jeg håber, det fungerer.
Kram! Paul.
Bidraget værdsættes.
10 point !!
hilsen 2!!
Mange tak, det hjalp mig meget med at afklare nogle ting, total tak, for flere detaljer eller spørgsmål vil jeg gå til MAN-SIDEN, gentagne hilsener.
Onkel meget tak, jeg har læst og testet eksemplerne. mange tak ... det er meget forståeligt. Skål
Jeg brugte ubuntu Server 12.04.2 LTS, og den version af crontab, jeg har, til at slette listen over brugerens job bruges, crontab -r (og -l, som denne manual siger). Sikker på, at det er ved spørgsmålet om versioner.
På den anden side kørte jeg engang kun crontab, og denne slags lad mig oprette min egen eksekveringsfil, men det var ikke den, der blev udført. Den, der kører, er den i / etc / crontab. måske bruger nogen kommentaren.
PS (jeg søger med find og hvor er crontab, men den returnerede kun den førnævnte adresse og en anden fil, der er krypteret, så hvis den, der blev udført, var den i / etc / crontab, men når kommandoen crontab -e blev udført, syntes min med alle de job, jeg havde defineret) hvor blev denne fil gemt '???? Hilsen. Jeg logger altid ind med root.
Fremragende, meget nyttigt !!!
Hej, jeg vil gerne gøre dette ………… «15 10 * * * root ifdown eth0»
det vil sige at netværkskortet på et bestemt tidspunkt er slukket ………… godt, jeg lagde det i crontab og det fungerede ikke …… .. hvad sker der?
Saludos y gracias
Du savnede at definere "mon" efter titlen "Føj opgaver til crontab"
Artiklen er stadig flot, cron er ekstremt nyttig.
Hvor sejt var det gode indlæg, spørg mig
Hvis jeg vil holde styr på de poster, der er tilbage ved udførelsen af opgaver, hvor kan jeg se det?
er decdir Jeg vil se historikken over de handlinger, der er foretaget tidligere i denne fil, og jeg vil se, hvem der har ændret den og datoen
tak
Jeg vil kontrollere ændringshistorikken for dette
hvordan kan jeg gøre det
tak
Godmorgen,
Jeg tror, at i ubuntu-scriptet har du lavet en fejl, du har sat ap-get -y opgradering i stedet for apt-get -y opgradering. (Du har efterladt et t).
En hilsen.
Det er det også. Tak skal du have!
Kram! Paul
Jeg vil vide, hvordan man opretter en cron-fil for at kunne specificere det tidspunkt, hver gang det udføres, biblioteket osv.
Tak for at afklare operationen og de grundlæggende kommandoer til cron, nu for at underholde dig selv lidt.
Når jeg leder efter information om ethvert emne relateret til Gnu / Linux, går jeg rundt og til sidst og finder i 90% af tilfældene altid den bedste tutorial i dette store samfund, jeg tror, at jeg fra nu af begynder her og derefter andre steder .
hilsen
Tak Sander! Et kram! Paul.
dom = dag i måneden
dow = ugedag
det er lettere, hvis du forbinder
Mange tak, meget komplet og godt forklaret.
Dette er det samme som min OS-lærer gav os, jeg ændrer ikke noget, nu kan jeg se, hvorfor klassen er så dårlig. -.
Kære,
Forespørgsel, kan varigheden af en opgave begrænses?
For eksempel har jeg en opgave, der gentages hvert 5. minut, ved gentagelse, hvis den opgave stadig er aktiv, dræb den og kør igen.
Tak,
Marcelo. -
Hej Marcelo!
Jeg tror, det ville være bedre, hvis du rejser dette spørgsmål i vores spørgsmål og svar service kaldet Spørg FromLinux så hele samfundet kan hjælpe dig med dit problem.
Et knus, Pablo.
godt indlæg.
Hvad er kommandoen pr. Terminal til at tilføje opgaver til crontab (uden at komme ind i crontab og tilføje dem manuelt med 'crontab -e' eller erstatte crontab med en anden crontab med 'crontab-fil').
Ideen er at oprette et eksternt script for at tilføje opgaverne til crontab
Tak
det ser ud til, at du kunne bruge 'ekko', hvad du vil tilføje '| kat >> 'cronotab-sti (/ etc / cronotab)' «
Hvordan ville et udtryk køre hver 3. dag nøjagtigt
Hej.
Jeg har et problem med at udføre et cron-job.
Jeg kører følgende opgave med cronta -e:
01 * * * * root /home/user/script/mfile.sh
men opgaven er ikke udført. Jeg har bekræftet, at myfile.sh har tilladelse til udførelse, og at den bruger, der udfører den, er root.
Jeg kører den samme opgave i / etc / crontab, og efter genstart af tjenesten fungerer den heller ikke for mig.
Indholdet af myfile.sh er en kommando, der opdaterer en DB, og hvis jeg kører den i konsollen, fungerer den.
nogen idé om, hvad problemet kan være?
Databasebrugeren har muligvis ikke alle tilladelser, og du bliver først nødt til at eksportere miljøvariablerne fra din databasemotor.
For eksempel i db2 vil denne linje gå til begyndelsen af scriptet
. / hjem / db2inst1 / sqllib / db2profile
En anden årsag kan være, at scriptet kræver forbindelse til databasen, oprette forbindelse til databasen i scriptet
Jeg vidste ikke, at jeg var nødt til at genstarte kronen, jeg havde kæmpet med dette i et stykke tid
De vil vide, hvordan de skal angive, at opgaven køres i slutningen af måneden, på det angivne tidspunkt .. detaljen er, at jeg ikke kan opnå, hvordan jeg ved, at det tager den sidste dag i hver måned .. ??? Jeg var nødt til at skrive dem en efter en ned, men når slutningen af februar måned kommer, at det er mest, er det kompliceret for mig ..
god dag!!
Hvordan stopper jeg den proces, der udføres i crontab?
proces * …………
Kan det være, at du kan hjælpe mig? eu tenho um script af minha forfattet, der ikke fungerer ingen crontab! jб dei alle tilladelser, ingen privat specifik cron eller bruger, der kan udføre det - der sker intet! Jeg vil gerne vide, om du kan hjælpe mig, nogle andre ting fungerer ikke cron! Vlws
Hvordan vil du sætte en opgave til at køre hver sidste dag i måneden (dage: 31-30-28)?
Som du allerede ved, bruges su-kommandoen til at skifte bruger i en konsol. Hvis jeg bruger kommandoen su således: "din bruger" skifter bruger, men uden de korrekte indstillinger for "bruger", hvis jeg kører su som: "su - bruger" skift bruger ved at indlæse brugerindstillingerne. Med cron angiver jeg brugeren, men hvordan indlæser jeg indstillingerne for denne bruger?
Og hvis jeg vil stoppe det?
Hej,
Jeg ved ikke, hvad jeg laver forkert, men jeg følger trinene, og der udføres intet. Jeg har forsøgt:
59 * * * * / usr / bin / gedit
* * * * * / usr / bin / gedit
* * * * * rod / usr / bin / gedit
* * * * * usr / bin / test.sh
* * * * * rod usr / bin / test.sh
og slet intet. Det udfører ikke noget. Jeg har genstartet og alt.
mange tak