Cron

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 14 september 2016; kontroller kräver 28 redigeringar .

cron  är en klassisk demon ( datorprogram  på  UNIX  -  klasssystem ) som används för att köra jobb med jämna mellanrum vid en viss tidpunkt. Regelbundna åtgärder beskrivs av instruktioner placerade i crontab- filer och speciella kataloger.

Namnet cron kommer från det grekiska ordet χρόνος (hrόnos) - tid (på engelska - chronos ). Utvecklaren av cron , Ken Thompson , bekräftade detta i ett privat samtal med Brian Kernighan .   .

På systemd- baserade system har cron faktiskt ersatts av den inbyggda systemd.timer-mekanismen.

Crontab- filer som skapats för enskilda användare finns i katalogen [1] /usr/spool/cron/crontabs/ eller /var/spool/cron/tabs/ . Det rekommenderas inte att redigera dem manuellt, för detta används kommandot crontab -e. Crontab- filerna som används för att hantera hela systemet finns i katalogen /etc/cron.d/ . Dessutom innehåller katalogerna /etc/cron.daily/ , /etc/cron.weekly/ och /etc/cron.monthly/ program som körs automatiskt (dagligen, veckovis eller månadsvis).

Den huvudsakliga cron-konfigurationsfilen, /etc/crontab, ser ut ungefär så här:

# /etc/crontab: systemomfattande crontab # Till skillnad från alla andra crontab behöver du inte köra kommandot `crontab' # för att installera den nya versionen när du redigerar denna fil # och filer i /etc/cron.d. Dessa filer har också användarnamnsfält, # som ingen av de andra crontabs gör. SHELL = /bin/sh PATH = /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # mh dom mon dow användarkommando 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * rottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 rottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * rottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #

crontab

Varje användare av systemet har sin egen fil inställd av crontab , som beskriver vid vilken tidpunkt och vilka program som ska köras för denna användares räkning. För att redigera crontab -filen används ett speciellt crontab- program med samma namn , vilket gör att du inte kan avbryta cron- processen medan du redigerar.

Visa innehållet i den aktuella schemafilen:

crontab -l

Ta bort den aktuella schemafilen:

crontab -r

För att redigera din användares crontab -fil, använd kommandot [2]

crontab -e

Crontab - tabellen består av 6 kolumner åtskilda av mellanslag eller tabbar . De första fem kolumnerna ställer in exekveringstiden ( minut , timme , dag , månad , veckodag ), de kan innehålla ett nummer, en lista med siffror separerade med kommatecken, ett antal nummer separerade med ett bindestreck, symboler *eller /. I system crontab- filer , efter tidsfälten, anges den användare från vilken kommandot körs. Alla andra tecken i strängen tolkas som ett körbart kommando med dess parametrar. Om kommandot skickar viss text till standardutdata skickas den texten till användarens e-post .

* * * * * kommando att köra - - - - - | | | | | | | | | ----- veckodag (0-7) (söndag = 0 eller 7) | | | ------- månad (1-12) | | ---------- dag i månaden (1-31) | ---------- timme (0-23) ------------- minut (0-59)

Ett exempel på crontab -fil :

# kommentarer börjar med '#' som vanligt # använd /bin/sh som ett skal SHELL = /bin/sh # skicka resultat till den här adressen MAILTO = paul@example.org # lägg till användarens hemkatalog till PATH PATH = /bin:/ usr/bin:/home/paul/bin #### Jobs startar här # exekvera varje dag vid 0 timmar 5 minuter, lägg till resultatet i log/daily 5 0 * * * $HOME /bin/daily.job >> $HOME /log/daily 2 > & 1 # kör 1:a i varje månad kl. 14:15 15 14 1 * * $HOME /bin/monthly # varje vardag kl. 22:00 0 22 *​* 1 -5 eko "Dags att gå hem" | mail -s "Klockan är redan 22:00" john 23 */2 * * * eko "Kör på 0:23, 2:23, 4:23, etc." 5 4 * * soleko "Kör klockan 4:05 på söndagen" 0 0 1 1 * eko "Gott nytt år!" 15 10 ,13 * * 1 ,4 eko "Detta meddelande visas på måndag och torsdag kl. 10:15 och 13:15" 0 -59 * * * * eko "Kör varje minut" 0 -59/2 * * * * echo " Körs på jämna minuter" 1 -59/2 * * * * eko "Körs på udda minuter" # var 5:e minut */5 * * * * eko "Fem minuter har gått" # varje första söndag i varje månad. -eq 7 är veckodagskoden, dvs 1 -> måndag , 2 -> tisdag etc. 0 1 1 -7 * * [ " $( date '+\%u' ) " -eq 7 ] && echo " Den här etiketten visas varje första söndagen i varje månad kl. 01:00"

Funktioner

  • Alla villkor (starttid) kontrolleras av "logiskt AND", förutom villkoren "veckodag" och "dag i månaden" - specificerade tillsammans, de behandlas av "logiskt ELLER", det vill säga "på valfri of the days", vilket återspeglas i dokumentationen (Ubuntu, Debian, FreeBSD). Denna logik är dock inte uppenbar och tillåter dig inte att skapa ett villkor som "första måndagen i varje månad" eller "varje fredag ​​den 13:e". Utvecklare ändrar inte detta beteende, betraktar det som en standard. [3]
  • Alla crontab- filer måste sluta med en tom rad, annars kommer den sista regeln eller hela filen att ignoreras.
  • Kommandona i crontab -filen använder standardskalsyntaxen, men de kan inte delas över flera rader.
  • Körbara filer i automatiskt skannade kataloger som /etc/cron.daily/ ignoreras om deras namn innehåller en punkt.
  • Crontab- syntaxen som används för att köras med några minuters mellanrum med en offset kan leda till oväntade resultat. Så inspelningen 1-56/5 * * * *utlöses inte den 1:a minuten av varje timme; för att utlösa "var 5:e minut från den 1:a minuten i timmen" använd formatet 1-59/5 * * * *eller 1,6,11,16,21,26,31,36,41,46,51,56 * * * *.
  • Ett tecken %i körkommandot används för att skicka en nyrad till kommandot (om det inte är escapet). Kommandotexten efter den skickas till programmet som körs inte som kommandoradsparametrar, utan via standardinmatning .
  • Utdata från lanserade kommandon skickas till användaren på vars vägnar lanseringen utfördes. Om direktivet finns i crontab -filen före kommandot MAILTO=<new@email>kommer utdata att skickas till den angivna adressen.

Grafiskt användargränssnitt

För användarnas bekvämlighet har många system speciella GUI- program för att hantera cron .

Gnome-schema

För Debian-baserade distributioner:

  • Installation:sudo apt-get install gnome-schedule
  • Kör: Program → Systemverktyg → Schema [1]

kcron

Kcron är ett KDE -gränssnitt för redigering av cron- konfigurationsfiler . Verktyget startas av Alt+F2 , i redigeringsfönstret kan du ange med musen:

  • fullständig sökväg till programmets körbara fil
  • rätt tidpunkt för att starta programmet
  • miljövariabler som behövs under programkörning

Liknande program

  • NnCron  är en schemaläggare för Windows .
  • Task Scheduler  - Windows Task Scheduler och dess konsolverktygschtasks.exe.
  • at  - kör program en gång vid en given tidpunkt.
  • anacron  - periodisk lansering av program, inte nödvändigtvis exakt vid den angivna tiden: till exempel, om maskinen stängdes av vid den tidpunkt som anges i uppgiften, kommer denanacronatt utföra uppgiften senare.
  • inetd  - kör serviceprogram för nätverksbegäran.
  • uppstart  - starta evenemangstjänstprogram (en generalisering av cron, atd, anacron, inetd ).

Anteckningar

  1. Man cron Arkiverad 28 maj 2007 på Wayback Machine .
  2. Cron Howto Arkiverad 15 maj 2011 på Wayback Machine .
  3. Debian Issue Tracker-diskussion Arkiverad 11 april 2018 på Wayback Machine .

Länkar