en enkel Launchd handledning

anta att du har skrivit ett litet skript som du vill köra varje så ofta. Om du använder en Mac är launchd ett perfekt verktyg att använda.

det är bättre än crontab eftersom bland annat om din dator är avstängd när ditt program är planerat att köras, kommer launchd att köra ditt program så snart datorn vaknar. Under tiden crontab kommer inte.

första sak att göra är att skapa ett skript för att köra. Jag ska skriva en enkel nod.js men du kan använda vad du vill.

touch ~/demo/main.js

för detta exempels skull kommer allt detta skript att göra att logga tiden då den kördes.

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

nu måste vi skapa en launchd konfigurationsplist-fil.

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

en plist-fil är bara Apples anpassade XML-format för konfigurationer. Klistra in den här koden där inne. Du kan behöva ändra /Users/chet/demo till katalogen du använder för det här exemplet.

den här filen anger några saker:

  • demonen startar när användaren loggar in.
  • det kommer att köras var 20: e sekund.
  • det kommer att matas ut till vissa loggfiler (mycket användbart för felsökning).
  • det kommer att ställa in miljövägen (användbart om ditt program använder andra kommandon från usr/local/bin).
  • kommandot kommer att köras i katalogen /Users/chet/demo.
  • och kommandot är /usr/local/bin/node main.js.

det finns en massa andra alternativ du kan läsa om här. Ett vanligt alternativ är alternativet KeepAlive som startar om ditt skript när det slutar eller kraschar. Detta är användbart om du vill att ditt skript alltid ska köras.

nu behöver vi bara få det att springa. Öppna först Console.app. Du kanske aldrig har använt det förut, men det är en inbyggd verktygsapp för felsökning av den här typen av saker. I systemet.loggavsnitt, du kan leta efter com.demo.daemonför att se om det finns några systemfel när du försöker starta launchd.

tillbaka i din Terminal, kör följande kommando.

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

om du ser några fel i Console.app kan du stoppa demonen med unload och leta efter fel i filen stderr.log.

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

om allt gick bra bör du inte se någonting i Console.app och du bör se loggar som kommer in i ~/demo/stdout.log – filen var 20: e sekund.