jednoduchý Launchd Tutorial

Předpokládejme, že jste napsali malý skript, který chcete spustit každý tak často. Pokud používáte Mac, pak launchd je perfektní nástroj k použití.

je lepší než crontab protože, mimo jiné, pokud váš počítač je vypnutý, když váš program je naplánováno spuštění, launchd spusťte program, jakmile se počítač probudí. Mezitím crontab nebude.

první věc, kterou musíte udělat, je vytvořit skript, který chcete spustit. Napíšu jednoduchý uzel.js, ale můžete použít, co chcete.

touch ~/demo/main.js

v zájmu tohoto příkladu bude tento skript zaznamenávat čas, kdy byl spuštěn.

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

nyní musíme vytvořit launchd konfigurační plist soubor.

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

soubor plist je pouze vlastní formát XML společnosti Apple pro konfigurace. Vložte tento kód tam. Možná budete muset změnit /Users/chet/demo do adresáře, který používáte pro tento příklad.

Tento soubor určuje několik věcí:

  • démon spustí vždy, když uživatel přihlásí.
  • provede se každých 20 sekund.
  • bude výstup do některých souborů protokolu (velmi užitečné pro ladění).
  • nastaví cestu prostředí (užitečné, pokud váš program používá jiné příkazy z usr/local/bin).
  • příkaz se spustí v adresáři /Users/chet/demo.
  • a příkaz je /usr/local/bin/node main.js.

existuje spousta dalších možností, o kterých si můžete přečíst zde. Běžně používanou volbou je možnost KeepAlive, která restartuje skript vždy, když skončí nebo havaruje. To je užitečné, pokud chcete, aby byl skript vždy spuštěn.

nyní to musíme spustit. Nejprve otevřete Console.app. Možná jste to nikdy předtím nepoužili, ale je to nativní obslužná aplikace pro ladění tohoto druhu věcí. V systému.log sekce, můžete se podívat na com.demo.daemon zjistit, zda existují nějaké systémové chyby při pokusu o spuštění launchd.

Zpět v Terminálu spusťte následující příkaz.

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

pokud v Console.app uvidíte nějaké chyby, můžete zastavit démona pomocí unload a hledat chyby v souboru stderr.log.

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

Pokud vše půjde dobře, neměli byste vidět nic v Console.app a měli byste vidět záznamy jdoucí do ~/demo/stdout.log soubor každých 20 sekund.