prosty samouczek Launchd

Załóżmy, że napisałeś mały skrypt, który chcesz uruchamiać co jakiś czas. Jeśli używasz komputera Mac, launchd jest idealnym narzędziem do użycia.

jest to lepsze niż crontab, ponieważ między innymi, jeśli komputer jest wyłączony, gdy program jest zaplanowany do uruchomienia, launchd uruchomi program, gdy tylko komputer się obudzi. Tymczasem crontab nie będzie.

pierwszą rzeczą do zrobienia jest stworzenie skryptu do uruchomienia. Napiszę prosty węzeł.js ale mozesz uzywac czegokolwiek chcesz.

touch ~/demo/main.js

ze względu na ten przykład, wszystko, co ten skrypt zrobi, to zarejestruje czas, kiedy został uruchomiony.

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

teraz musimy utworzyć plik PLIST konfiguracyjny launchd.

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

plik plist jest tylko niestandardowym formatem XML firmy Apple dla konfiguracji. Wklej tutaj ten kod. Być może trzeba będzie zmienić /Users/chet/demo na katalog, którego używasz w tym przykładzie.

ten plik określa kilka rzeczy:

  • Demon uruchomi się za każdym razem, gdy użytkownik się zaloguje.
  • wykonuje się co 20 sekund.
  • to będzie wyjście do niektórych plików dziennika (bardzo przydatne do debugowania).
  • ustawi ścieżkę środowiska (przydatne, jeśli twój program używa innych poleceń z usr/local/bin).
  • polecenie zostanie wykonane w katalogu /Users/chet/demo.
  • i polecenie to /usr/local/bin/node main.js.

istnieje kilka innych opcji, o których możesz przeczytać tutaj. Często używaną opcją jest opcja KeepAlive, która restartuje skrypt po jego zakończeniu lub awarii. Jest to przydatne, jeśli chcesz, aby twój skrypt był zawsze uruchomiony.

Najpierw otwórz Console.app. Być może nigdy wcześniej go nie używałeś, ale jest to natywna aplikacja narzędziowa do debugowania tego rodzaju rzeczy. W systemie.sekcja log, możesz wyszukać com.demo.daemon, aby sprawdzić, czy są jakieś błędy systemowe podczas próby uruchomienia launchd.

z powrotem w terminalu, uruchom następujące polecenie.

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

jeśli widzisz błędy w Console.app, możesz zatrzymać demona za pomocą unload i poszukać błędów w pliku stderr.log.

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

jeśli wszystko poszło dobrze, nie powinieneś niczego widzieć w pliku Console.app i powinieneś widzieć logi przychodzące do pliku ~/demo/stdout.log co 20 sekund.