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.daemonfor 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.