Most recent comments
Jogging og blogging
Are, 9 måneder, 1 uke
Liveblogg nyttårsaften 2016
Are, 9 måneder, 1 uke
Reading in dark times
Are, 11 måneder, 1 uke
Moldejazz 2016
Camilla, 1 år, 2 måneder
Dørskilt
Karoline, 1 år, 3 måneder
Halifax
Tor, 1 år, 4 måneder
Sony Smartwatch 3 review
Tor, 1 år, 4 måneder
Numerikk, takk
Tor, 1 år, 4 måneder
Topp tur
Camilla, 1 år, 6 måneder
Tolkien reading day
Tor, 1 år, 6 måneder
50 book challenge
Camilla, 9 måneder, 2 uker
Ten years ago
To ting på en gang
Tor
Controls
Register

cron

En av våre lesere spurte meg her en dag om det var lettvint å hacke sammen noe python-kode for å automatisk lese opp en melding på bestemte tidspunkter. Det er det forsåvidt, men som en vis mann sa en gang, hvis linux kan gjøre noe er det ingen grunn til at du skal gjøre det selv, og dette er nettopp et slikt tilfelle, siden oppgaven kan løses med en cronjobb og en lydspiller for kommandolinjen.

For å lese opp en melding finnes et utall muligheter. En enkel løsning er å lese inn meldingen og lagre som mp3 eller wav, og spille den av fra kommandolinjen. På Mac er for eksempel programmet afplay installert som standard, og kan spille en del forskjellige lydfilformater. På linux finnes det en haug med alternativer, men har du for eksempel en Raspberry Pi med debian skal aplay i prinsippet funke rett ut av boksen. Har lagret lydfilen din som message.mp3 kan du da spille den av ved å skrive
aplay message.mp3

Et annet frekt alternativ kan være å bruke en tekstleser. Igjen, på Mac finnes say installert som standard, så om du skriver
say "Biblioteket stenger om ti minutter"

vil du høre en vennlig, digital stemme som muligens strever litt med norsk uttale. På linux finnes også flere alternativer, se for eksempel her.

Når du har etablert hva du må gjøre for å få meldingen din lest opp kan vi gå videre til å få dette til å skje automatisk på bestemte tidspunkter, ved hjelp av cron. cron er en innebygget tjeneste på Mac og linux som utfører én ting (i tråd med unix-filosofien, som sier at man skal lage verktøy som gjør én ting, og gjør den bra), nemlig å utføre kommandoer på faste tidspunkter. Disse kommandoene spesifiseres i en cron table, eller crontab, og det finnes en for systemet og en for hver bruker. For å redigere din egen crontab åpner du en terminal, og skriver
crontab -e

Hvis du ikke har lagt inn noen cronjobber fra før får du da opp en tom tekstfil i din favoritt-editor. Hvis du nå for eksempel vil spille av en beskjed hver hverdag, klokken 18.30, og hver lørdag klokken 15.30, skriver du noe slikt:
30 18 * * 1-5 aplay message.mp3
30 15 * * 6 aplay message.mp3

Så lagrer du filen, og alt er i boks. Så lenge maskinen står på vil disse kommandoene bli kjørt på de spesifiserte tidspunktene. Syntaxen er som følger: I den første kolonnen står minutter, i den andre timer, i den tredje dag i måneden, i den fjerde måned, i den femte ukedag (0 er søndag, 6 er lørdag) og til slutt skriver du kommandoen som skal kjøres. Det vi har gjort her er altså på den første linjen å si at når klokken er 18.30, uansett hvilken dato og måned, hvis ukedagen er mandag til fredag, skal kommandoen aplay message.mp3 utføres, og på den andre linjen sier vi at hvis klokken er 15.30, uansett dato og måned, hvis dagen er en lørdag, skal den samme kommandoen kjøres.

Hvis du skulle ønske å spille flere forskjellige beskjeder, på forskjellige tidspunkter, er det bare å lage flere forskjellige lydfiler og legge til flere linjer i crontaben. Lettvint, eller hur?
Jørgen likes this

Comments

Jørgen,  04.03.15 11:30

Takk. Langt bedre svar enn jeg hadde håpet på. Når jeg har lite peiling på noe er det ofte at jeg vil gjøre ting langt vanskeligere enn de egentlig trenger å være. Så det er fint med en oppkvikkende barbering.
Tor,  04.03.15 20:43

Det er ganske imponerende hva man kan utrette med en linux-boks, egentlig. For meg er det utenkelig å gå tilbake til å jobbe på en platform som ikke kommer med slike verktøy innebygget, men jeg føler at jeg sliter med å gi gode eksempler som folk flest kan relatere til. La meg likevel gjøre et lite forsøk.

Si at du har en tekstfil, names.txt, med en liste med navn. 2 millioner navn, for eksempel. Så ønsker du å sortere denne listen. Kein Problem, som de sier i Sverige:
sort names.txt -o names.txt

Denne kommandoen leser filen names.txt, sorterer innholdet og lagrer den sorterte listen tilbake til den samme filen. På min maskin tar det ca 1.48 sekunder å sortere en fil med to millioner linjer (dette vil nok variere en del avhengig av hva som står på de linjene). Sett nå at jeg hadde 100 slike filer, names_1.txt, names_2.txt, ogsåvidere, og jeg ønsker å sortere alle sammen. Igjen, dette tar linux på strak arm:
ls *.txt | xargs -I file sort file -o file

Men det tar litt lang tid, synes jeg, to og et halvt minutt for å kverne gjennom fire-fem gigabyte med data, hva er dette for noe? 90-tallet? Heldigvis har jeg firekjerners prosessor i laptopen min, og heldigvis gjør linux det trivielt å benytte den:
ls *.txt | xargs -P4 -I file sort file -o file

Jeg bare slenger på flagget -P4, som forteller xargs at den kan kjøre fire prosesser samtidig, så blir nye prosesser automagisk startet når det er ledig kapasitet, og vips går det nesten fire ganger fortere å sortere dataene mine.

Kult, eller hur?
Tor,  04.03.15 20:45

Jeg føler jeg må understreke at når jeg snakker om eksempler man kan relatere til mener jeg ikke eksempler man kan forstå, for jeg regner med de fleste forstår konseptet å sortere en liste med navn, men jeg tenker på et eksempel får vanlige folk til å tenke «dette kunne jeg ha god bruk for, fra tid til annen».
Category
Technology
Tags
linux
cron
Views
1503