en simpel Launchd Tutorial
Antag at du har skrevet et lille script, som du vil køre så ofte. Hvis du bruger en Mac, er launchd
et perfekt værktøj at bruge.
det er bedre end crontab
fordi, blandt andet, hvis din computer er slukket, når dit program er planlagt til at køre, launchd
vil køre dit program, så snart computeren vågner op. I mellemtiden crontab
vil ikke.
første ting at gøre er at oprette et script til at køre. Jeg har tænkt mig at skrive en simpel Node.js men du kan bruge hvad du vil.
touch ~/demo/main.js
af hensyn til dette eksempel skal alt dette script logge det tidspunkt, hvor det blev kørt.
console.log("Hello", Date.now())
nu skal vi oprette en launchd
konfigurationsplist-fil.
touch ~/Library/LaunchAgents/com.demo.daemon.plist
en plist-fil er bare Apples brugerdefinerede format til konfigurationer. Indsæt denne kode derinde. Du skal muligvis ændre /Users/chet/demo
til den mappe, du bruger til dette eksempel.
denne fil angiver et par ting:
- dæmonen starter, når brugeren logger ind.
- det udføres hvert 20. sekund.
- det vil output til nogle logfiler (meget nyttigt for debugging).
- det indstiller miljøstien (nyttigt, hvis dit program bruger andre kommandoer fra
usr/local/bin
). - kommandoen udføres i mappen
/Users/chet/demo
. - og kommandoen er
/usr/local/bin/node main.js
.
der er en masse andre muligheder, du kan læse om her. En almindeligt anvendt mulighed er KeepAlive
– indstillingen, som genstarter dit script, når det slutter eller går ned. Dette er nyttigt, hvis du vil have dit script til altid at køre.
nu skal vi bare få det til at køre. Først skal du åbne Console.app
. Du har måske aldrig brugt det før, men det er en native utility app til debugging denne slags ting. I systemet.log sektion, kan du kigge efter com.demo.daemon
for at se, om der er nogen systemfejl, når du forsøger at starte launchd
.
tilbage i din Terminal skal du køre følgende kommando.
launchctl load ~/Library/LaunchAgents/com.demo.daemon.plist
hvis du ser nogle fejl i Console.app
kan du stoppe dæmonen med unload
og se efter fejl i stderr.log
filen.
launchctl unload ~/Library/LaunchAgents/com.demo.daemon.plist
cat ~/demo/stderr.log
hvis alt gik godt, skulle du ikke se noget i Console.app
, og du skulle se logfiler, der kommer ind i ~/demo/stdout.log
filen hvert 20.sekund.