Scheduling

xterm

Hvad kan det bruges til?
Du sidder ved din nyinstallerede Linux maskine, laver ikke noget særligt (eller prøver febrilsk at løse et eller andet underligt problem :-) ), så begynder harddisken pludselig at snurre og hele maskinen viser tegn på livlig aktivitet. Efter et par minutter, ender aktiviteten og alt bliver som det var før. Du har netop været udsat for et schedulet 'job'. 'Job' er Unix slang for et program der kører i baggrunden, f.eks. uden bruger interaktivitet.
De fleste Linux-distributioner kommer med flere for konfigurerede 'jobs' som tager sig at system vedligeholdelse; opdatering af databanken for 'locate' kommandoen, flytte logfiler i '/var/log', køre sikkerhedstests, fjerne ubrugte moduler fra system hukommelsen osv. Hvis du er nysgerrig så kig i mapperne '/etc/cron.d' (minut jobs), '/etc/cron.hourly' (sceduled timejobs), '/etc/cron.dayly' og '/etc/cron.monthly' som indeholder de scripts der varetages af (ana)cron dæmonen via '/etc/crontab'.

Selvfølgelig kan du også udnytte dette system til f.eks.:
- køre backup,
- lade systemet ringe til Internettet og modtage mail hver time,
- sende dig selv huske-beskeder,
- sende en fødselsdags mail på den rigtige dato,
- fjerne ubrugte og temp-filer,
- schedule downloads, uploads og 'spejle' (mirroring)
- logge inaktive (idle) brugere af systemet osv.

Kort fortalt: alt du vil have skal køres med faste intervaller og på bestemte tidspunkter på din computer, og som ikke kræver bruger tilstedeværelse, kan du lade Linux gøre for dig.

'Sleep', 'at', 'cron' og 'anacron'
Disse fire er ansvarlig for forsinket og schedulede kommando-kørsel:
- 'sleep' suspenderer et kørende job i en given tidsperiode.
- 'at' starter jobs på et givet tidspunkt
- 'cron' kører jobs med intervaller
- 'anacron' kører jobs med fleksible intervaller.

'sleep' er allerede installeret, da den ofte er brugt 'shell-scipts'. 'at' pakken er måske ikke installeret. Tjek med
rpm -q at
'cron' er installeret standard, dog er 'anacron' måske ikke loaded fra boot.

Sleep
Medmindre du skriver dine egne scripts eller editerer andres, er 'sleep' ikke af megen nytte for dig. I scripts, er 'sleep' dog meget anvendelig.
Syntaksen er:
sleep sekunder
Har du nogensinde set på boot-sekvensen på et Mandrake system nøjere, så vil du se beskeden:
Pres "I" for interaktiv startop
Har du nogensinde nået at presse "I" hurtigt nok? Jeg har i hvert fald ikke. Så åbner du bare filen "/etc/rc.d/rc.sysinit" som root i en editor. Ved mig stod der:
if [ "$PROMPT" != "no" ]; then
gprintf "ttPress 'I' to enter interactive startup."
echo -en "r"
echo
sleep 1
fi

hvilket fortæller du har 1 sekund (sleep 1) til at at presse "I". Hvis du skriver "sleep 5" så vil du have 5 sekunder til at finde "I" tasten.

"sleep" er også brugt i en række scripts, som starter en række programmer på en gang, for at reducere diskaktiviteten med en pause mellem kommandoerne.

En pop-up påmindelse
Du har 10 minuter tilbage før du skal væk fra computeren. Du vil have Linux skal fortælle dig når tiden er gået.
Dette kræver enten "xmessage" (som er en del at X11R6-contrib pakken) eller "gmessage" (der er en del af "gtkdialogs" pakken).
Indtast denne kommando i en terminal, eller i den pop-up kommandolinie der hører til din window manager. Prøv at taste Alt+F2 (ved ALT+F2 skal der ikke parantes omkring).
Skriv:
(sleep 10m; xmessage "Tid til at lukke") &
beskeden vil poppe op når der er gået 10 min.

"at"
"at" tilføjer schedulet jobs til "at køen", vedligeholdt af "atd" som står for "at deamond". "atd" skal køre for "at" for at det skal virke ordentligt. Du kan tjekke det som root ved at skrive:
# service atd status
Du kan give "at" absolutte tidspunkter, som den 30 April kl. 12.00:
at 1200 Apr 30
eller hvad med i morgen kl. 14.00?
at 14.00 tomorrow
eller "om 5 timer og 25 min"? (lad os sige klokken er 16.00)
at 1625 + 5 hours
Gyldige tidspunkter kan findes i filen '/usr/share/doc/at-[...]/timespec'.
Tilføje et job til "at køen" (at queue) er let nok. Du skriver tid og (måske) datoen først, tyk "enter" og skriv de kommandoer der skal udføres (en pr. linie). Når du er færdig taster du på en tom linie.
at tid dato
at>commando 1
at>commando 2
at>CTRL+d
warning: commands will be executed using /bin/sh
job number at full time and date
Hvis "at" kommer med nogen output, vil "at" maile det til dig. For at få en liste over dine jobs i kø, så kør "atq", og for at fjerne et job fra køen, brug "atm job".

Send dig selv en schedulet besked
Du skal foretage et vigtigt telefonopkald 3 dage fra nu, kl. 16.00. for at blive påmindet om dette, kan du sende en mail til dig selv en halv time før (dette kræver din mail deamon er konfigureret rigtigt).
at 1530 today + 3 days
at>echo "Husk at ringe kl. 16.00!" | mail brugernavn@localhost
at>CTRL+d
Læg mærke til "today". Dette er faktisk ikke nødvendigt, men for at være sikker på at "at" tæller fra i dag, ligegyldigt tidspunktet. Hvis klokken var overskredet 15.30 i dag, ville "at" ellers først tælle fra i morgen og du ville få din mail en dag for sent.

Denne artikel vil blive efterfulgt at del 2 senere.