Skrevet i | VS |
---|---|
Operativsystem | Unix-type |
Type |
UNIX-verktøy ( d ) Daemon datamaskinoppgaveplanlegging |
cron er et program som lar brukere av Unix- systemer automatisk kjøre skript, kommandoer eller programvare på en forhåndsdefinert dato og tid, eller på en forhåndsdefinert syklus.
Konseptet med dette programmet stammer fra Unix- systemene til Berkeley og AT&T , og ble senere rasjonalisert av Paul Vixie . Den opprinnelige ideen var å ha en tjeneste som våkner opp hvert minutt, analyserer et sett med filer i en bestemt katalog og bestemmer derfra om slike skallkommandoer skal utføres innen den tiden.
Cron er avkutting av cron kategorien, selv avkutting av c h ron o tab le som betyr "planlegging bordet" (på gresk, Chronos (χρόνος) betyr tid).
Dette er en veldig nyttig funksjon for rutinemessige systemadministrasjonsoppgaver , men den kan veldig godt brukes til noe annet. For eksempel kan cron spille en ogg- fil hver dag klokka sju bortsett fra lørdag og søndag for å våkne til musikk.
cron er en demon , som i datamaskinsjargong refererer til et program som kjører i bakgrunnen. Cron-tjenesten ( crond ) venter altså til tiden spesifisert i konfigurasjonsfilen (kalt crontab ) og utfører deretter den tilsvarende handlingen og går i dvale til neste hendelse.
Cron-tjenesten startes av rotkontoen for å kunne tilpasse seg identiteten til hver bruker. På noen Unixer, hvis den blir drept (med kill-kommandoen), startes den automatisk på nytt av systemet.
crontaber navnet på programmet under Unix (og Linux ) som lar deg redigere konfigurasjonstabellene til cron- programmet . Disse tabellene spesifiserer oppgavene som skal utføres og deres utførelsesplan, muligens med periodisitet. I forlengelsen kaller vi ofte cron (eller cron-jobb på engelsk) for enhver oppgave som er lansert etter en periodisk tidsplan.
OperasjonKommandoen crontabendrer en fil relatert til brukeren. For sikkerhets skyld, crontabsjekk syntaksen før du oppdaterer filen. Denne filen ligger i trestrukturen /var , for eksempel:
Så for brukeren rootpå en Debian- maskin vil crontabellen bli lagret i/var/spool/cron/crontabs/root
De fleste Linux-systemer (SuSE, Debian, Red Hat ) har også et sentralisert cron-bord i /etc/crontab.
Det er også poster /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weeklyog /etc/cron.monthlysom inneholder cron tabeller av ulike deler av systemet (log rotasjon, oppdatere filer ...).
For arbeidsstasjoner som ikke nødvendigvis fungerer 24 timer i døgnet, lar anacron- applikasjonen deg starte kommandoer som burde ha vært da datamaskinen var slått av.
bruk Leser bordetFølgende kommandolinje viser innholdet i cron-tabellen for den nåværende brukeren:
$ crontab -lDenne kommandoen viser ikke den sentraliserte tabellen ( /etc/crontab).
Endring av tabellenFølgende kommando brukes til å endre crontabellen for den nåværende brukeren:
$ crontab -eDenne kommandoen har effekten av å starte standardredigereren (generelt vi). Redaktøren viser deretter den gjeldende tabellen. Når du lanserer for første gang crontab, er tabellen tom, muligens sammensatt av hjelpekommentarer (linjer som begynner med tegnet #).
Standardeditoren er konfigurert ved hjelp av miljøvariablene $EDITOReller $VISUAL. For eksempel for å konfigurere redigeringsprogrammet vim :
$ export EDITOR=vimDenne kommandoen lar deg heller ikke endre den sentraliserte tabellen ( /etc/crontab).
Utskifting av bordcrontabkan også overskrive gjeldende tabell med en ny. Denne nye tabellen kan leveres i en fil som en parameter:
$ crontab fichier-contenant-la-nouvelle-table.txt Slette tabellenFølgende kommandolinje sletter innholdet, uten bekreftelse, av crontabellen for den nåværende brukeren:
$ crontab -r Tabellsyntaks VurderingHver oppføring i tabellen (hver rad) tilsvarer en oppgave som skal utføres og må respektere denne notasjonen:
mm hh jj MMM JJJ tâcheFor hver numeriske verdi ( mm , hh , jj , MMM , JJJ ) er de mulige notasjonene:
Hvis "dagen i månedsnummeret" og "ukedagen" er angitt på samme linje, vil cron utføre oppgaven når ett av feltene samsvarer. For eksempel indikerer følgende linje at oppgaven skal utføres på fredager så vel som den 13. i hver måned, ved midnatt:
0 0 13 * 5 tâche DriftsloggOppgaven er en kommando som skal utføres. Hvis denne oppgave skriver til dens standard utgang eller standard feil , da den crond nissen sender dem via e-post til den tilsvarende brukeren (det som er angitt ved den sjette parameter).
For å forhindre at denne informasjonen overføres via e-post, er det mulig å omdirigere den i filer. For eksempel :
mm hh jj MMM JJJ tâche > fichier-1 2> fichier-2Eller for å samle standardutgangene og feilene i samme fil som heter journal.txt :
mm hh jj MMM JJJ tâche >> /mon/répertoire/journal.txt 2>&1 SnarveierSnarveier | Beskrivelse | Tilsvarende |
---|---|---|
@reboot | Mens du starter opp | Nei |
@yearly | Hvert år | 0 0 1 1 * |
@annually | Hvert år | 0 0 1 1 * |
@monthly | Hver måned | 0 0 1 * * |
@weekly | Hver uke | 0 0 * * 0 |
@daily | Hver dag | 0 0 * * * |
@midnight | Hver natt | 0 0 * * * |
@hourly | Hver time | 0 * * * * |
Hvert av eksemplene sparer ledig diskplass ( df- kommando ) til filen /tmp/df.logpå forskjellige tidspunkter. For å beholde historikken bruker disse eksemplene omdirigering >>som gjør det mulig å legge til de nye dataene på slutten av filen (hvis denne allerede eksisterer, ellers blir den opprettet).
Hver dag klokka 23:30:
30 23 * * * df >> /tmp/df.logHver time, fra 5 minutter:
5 * * * * df >> /tmp/df.logHver første måned i 23 timer 30 :
30 23 1 * * df >> /tmp/df.logHver mandag kl 22 h 28 :
28 22 * * 1 df >> /tmp/df.logHver fredag og hele 13 i hver måned på 11 h 22 :
22 11 13 * 5 df >> /tmp/df.logHver fredag 13. i hver måned på 11 h 22 :
22 11 13 * * [ `date '+\%w'` -eq 5 ] && df >> /tmp/df.logFra 2 til 5 i hver måned kl 10 h 12 :
12 10 2-5 * * df >> /tmp/df.logHver merkelig dag i måneden kl . 23.00 59 :
59 23 */2 * * df >> /tmp/df.logHver virkedag klokken 22:
0 22 * * 1-5 df >> /tmp/df.logHvert 5. minutt:
*/5 * * * * df >> /tmp/df.logHver siste dag i måneden (omvendt skråstrek foran% er obligatorisk når du redigerer crontab, i motsetning til når du utfører kommandoen manuelt):
0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >> /tmp/df.logOvennevnte eksempler bruker omdirigering for >>å opprette en logg på tvers av flere kjøringer.
For å skrive til forskjellige filer er det mulig å bruke kommandoen date, som med følgende eksempel:
30 23 * * * df > /tmp/df_`date +\%d_\%m_\%Y_\%H_\%M`.log(tegnet `(alvorlig aksent, U + 0060) er produsert av kombinasjonen av tastene [ Alt Gr] + [7] på AZERTY- tastaturet i Frankrike)
Selvfølgelig er en annen løsning å skrive filen i et skript appelle-df.sh :
#!/bin/sh JJ_MM_ANNEE_HH_MM=`date +\%d_\%m_\%Y_\%H_\%M` df > /tmp/df_${JJ_MM_ANNEE_HH_MM}.logOg erstatt forrige cron-bord med:
30 23 * * * appelle-df.sh Nyttige kommandoerDisse kommandoene fungerer ikke for alle Linux- og Unix- distribusjoner .
Angir tidspunktet for den siste oppgaven som ble utført for alle brukere:
ls -lut /etc/init.d/cronPakk ut informasjon om crontabellen fra systemloggen:
grep -w cron /var/log/syslogStart cron-demon igjen:
/etc/init.d/cron force-reloadNår vinteren / sommertid endrer seg , endres den offisielle tiden fra 02:00 til 03:00 (i henhold til de gjeldende reglene i Frankrike). De oppgavene planlagt 14:00-24:00 2 59 vil derfor ikke bli behandlet. Omvendt vil disse samme oppgavene utføres to ganger (i løpet av sommeren / vinteren ).
For å unngå denne ulempen er de fleste Unix-systemer konfigurert til å bruke UTC ( Coordinated Universal Time ), som ikke er underlagt disse sommertidreglene.
mcron er ikke en ordentlig implementering av nevnte program, men en viktig utvikling kodet på ordningsspråk . Den støtter ikke bare den tradisjonelle metoden , men også konfigurasjonsfiler skrevet i Scheme, som gir den en viss fleksibilitet til å definere oppgavene som skal utføres (det kan for eksempel ta hensyn til systembelastningen ). Nyheten kommer fra dens evne til å lese alle nødvendige instruksjoner, behandle de som må utføres neste gang, og legge seg i dvale innen den tildelte tiden. Når den våkner, utføres kommandoene og tidspunktet for neste behandling beregnes. Spesifikasjonene til dette nye programmet er skrevet på et språk fra Lisp- familien , som tillater samtidig behandling av flere instruksjoner, og større fleksibilitet enn Vixies filformat . For ikke å nevne at endringer som er gjort i brukernes crontabs- filer rapporteres direkte til det av crontab- programmet , mens cron må sjekke / etc / crontab hvert minutt, selv om bruken av denne filen er sterkt motløs og den kan deaktiveres. Det er gratis programvare distribuert av GNU Project under vilkårene i GPL- lisensen .
Noen deler av denne artikkelen, eller en tidligere versjon av denne artikkelen, er basert på artikkelen Nettsted for planlegging av oppgaver Hvordan det fungerer . Den opprinnelige artikkelen inneholder følgende copyrightmerknad: “© Copyright 2004 Jean-François Pillou - Hosted by Web-solutions.fr. Dette dokumentet fra CommentCaMarche.net er underlagt GNU FDL-lisensen . Du kan kopiere, endre kopier av denne siden så lenge dette notatet vises tydelig. ". Siden den gang har dette nettstedet fungert? endret lisensen. Og til slutt er den opprinnelige artikkelen ikke lenger tilgjengelig.