En Enkel Launchd Tutorial

Anta at du har skrevet et lite skript som du ønsker å kjøre hver så ofte. Hvis Du bruker En Mac, er launchd et perfekt verktøy å bruke.

det er bedre enn crontab fordi, blant annet, hvis datamaskinen er slått av når programmet er planlagt å kjøre, launchd vil kjøre programmet så snart datamaskinen våkner. I mellomtiden crontab vil ikke.

Første ting å gjøre er å lage et skript for å kjøre. Jeg skal skrive en enkel Node.js men du kan bruke hva du vil.

touch ~/demo/main.js

for dette eksempelets skyld skal alt dette skriptet logge tiden da det ble kjørt.

console.log("Hello", Date.now())

nå må Vi opprette en launchd konfigurasjonsplistfil.

touch ~/Library/LaunchAgents/com.demo.daemon.plist

en plist-fil er Bare Apples tilpassede XML-format for konfigurasjoner. Lim inn denne koden der inne. Du må kanskje endre /Users/chet/demo til katalogen du bruker for dette eksemplet.

denne filen angir et par ting:

  • demonen starter når brukeren logger inn.
  • det vil kjøre hvert 20. sekund.
  • det vil utgang til noen loggfiler (veldig nyttig for debugging).
  • det vil sette miljøbanen (nyttig hvis programmet bruker andre kommandoer fra usr/local/bin).
  • kommandoen vil utføres i katalogen /Users/chet/demo.
  • og kommandoen er /usr/local/bin/node main.js.

Det finnes en rekke andre alternativer du kan lese om her. Et vanlig alternativ er alternativet KeepAlive som vil starte skriptet på nytt når det slutter eller krasjer. Dette er nyttig hvis du vil at skriptet skal alltid være i gang.

Nå trenger vi bare å få det til å løpe. Først åpner du Console.app. Du har kanskje aldri brukt det før, men det er en innfødt verktøyapp for feilsøking av denne typen ting. I systemet.log-delen, kan du se etter com.demo.daemon for å se om det er noen systemfeil når du prøver å starte launchd.

Tilbake i Terminalen din, kjør følgende kommando.

launchctl load ~/Library/LaunchAgents/com.demo.daemon.plist

hvis du ser noen feil i Console.app kan du stoppe demonen med unload og se etter feil i stderr.log – filen.

launchctl unload ~/Library/LaunchAgents/com.demo.daemon.plist
cat ~/demo/stderr.log

hvis alt gikk bra, bør du ikke se noe i Console.app og du bør se logger som kommer inn i ~/demo/stdout.log – filen hvert 20. sekund.