Cron i Mac OS X? Nä, Launchd! was last modified: Dec 14th, 2015 by Albin Kiland

Cron i Mac OS X? Nä, Launchd!

7
Dec
2015
Albin Kiland blogg

Du kanske vet vad Cron är? Inte?
Cron är en tidsbaserad mjukvara för schemaläggning. Du kan t.ex. få ett skript att exekvera varje fredag kl. 12.00 mm.
Sedan en tid tillbaka är dock Cron deprecated i Mac OS X. Deprecated betyder att det fortfarande fungerar men att det inte rekommenderas och kommer att tas bort i framtiden (funderar på om Cron inte redan tagits bort…). Det betyder i sin tur att det är dags att titta lite på ersättaren, launchd!
Lite krångligare, mycket bättre.

En av fördelarna med launchd mot Cron är om datorn som används ligger i vila när det är dags att köra en instruktion, kommer datorn att väckas och launchd kommer göra sitt. Så fungerar det inte i Cron, tyvärr. En instruktion i Cron körs helt enkelt inte om datorn är i vila vid tidpunkten för körning.

Hur fungerar det då?
I Cron redigerar du din crontab-fil, ofta genom kommandot ‘crontab -e’.
Med launchd skapar du istället .plist-filer i en specifik mapp som innehåller instruktioner till launchd om vad som ska göras, och när.

Beroende på vad ditt skript gör ska din .plist-fil ligga på lite olika ställen.
1. /Library/LaunchDaemons – Ditt skript ska köras även när ingen användare är inloggad på datorn.
2. /Library/launchAgents – Ditt skript ska köras när en användare är inloggad på datorn. Ditt skript kommer exekveras som användare ‘root’.
3. ~/Library/LaunchAgents – Ditt skript ska köras när du själv är inloggad. Skriptet kommer exekveras med dig som användare.

Nedan är ett exempel på hur du gör för att exekvera ett skript varje minut,  365 dagar/år. Jag är en snubbe som gillar Terminalen så dessa exempel förutsätter att du använt den tidigare.

Öppna Terminalen och kör följande kommando:
”cd ~/Library/LaunchAgents”
Detta tar dig till mappen LaunchAgents i din hem-mapp.

Nu är det dags att skapa en ny Plist-fil.
Följande kommando öppnar redigeraren Nano för att skapa plist-filen.
”nano se.bixue.test.plist” (döp filen till ditt egna reversed domain name)

Skriv in nedan exempel så går jag igenom vad som händer längre ner!
Glöm inte spara när du är klar.

<?xml version="1.0" encoding="UTF-8"?>
http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>label</key>
        <string>se.bixue.test</string>

        <key>ProgramArguments</key>
        <array>
                <string>/Users/Skript/dittskript.sh</string>
        </array>

        <key>OnDemand</key>
        <false/>

        <key>StartInterval</key>
        <integer>60</integer>

</dict>
</plist>

Vad betyder allt detta nu då?

<key>Label</key>
<string>se.bixue.test</string>

En unik sträng för din Plist-fil så att launchd inte blandar ihop dem.
Borde vara samma som du döpt plist-filen till.

<key>ProgramArguments</key>
<array>
<string>/Users/Skript/dittskript.sh</string>
</array>

Detta är sökvägen till ditt skript i din hem-mapp.
Om ditt skript tar emot argument lägger du in dessa i samma array på ny rad.
Tänk på att första raden i denna array måste vara sökvägen till skriptet!

<key>OnDemand</key>
<false/>

OnDemand betyder att skriptet ska köras varje gång plist-filen laddas in av launchd. I detta fall vill vi inte det men du kan sätta värdet till ‘true’.

<key>StartInterval</key>
<integer>60</integer>

Okay, det är här du väljer hur ofta ditt skript ska exekveras (i sekunder).
Ett värde på 60 betyder helt enkelt att skriptet ska exekveras var 60:e sekund.
Det finns även ”StartCalendarInterval” där du kan välja månad/dag/timme osv. om det är vad du är ute efter.

Nu måste vi meddela launchd att det finns en ny plist-fil att hålla knas på.
Kör följande kommando i terminalen:
”launchctl load se.bixue.test.plist”

Om du gjort allt rätt(och jag förklarat rätt) kommer ditt skript att exekveras en gång per minut i all oändlighet.
Om du vill avbryta kör du detta kommando:
”launchctl unload se.bixue.test.plist”

Apples dokumentation på schemaläggning med launchd