Odpowiedzi:
Znalazłem rozwiązanie
sudo launchctl log level debug
a potem
tail -f /var/log/system.log
Zakładając, że próbujesz zarejestrować swój proces, a nie sam się uruchomić, jeśli w uruchomionym pliku plist zostaną uwzględnione następujące wiersze:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
i ponownie załadować proces, wszelkie rejestrowanie lub drukowanie wewnętrzne skryptu będzie przechwytywane w jednym z tych dwóch plików przy każdym uruchomieniu. chociaż obracanie plików zależy od Ciebie. jak można się spodziewać, jeśli użyjesz tego samego pliku w obu instancjach, zarejestruje on zarówno błąd, jak i standardowe wyjście w tym samym miejscu.
Patrz: Debugowanie uruchomionych zadań w sekcji Tworzenie demonów i agentów uruchamiania .
W systemie OS X 10.11 (El Capitan) można użyć, sudo launchctl debug <service-target> --stdout --stderr
aby włączyć rejestrowanie jednorazowe, jeśli nie chcesz korzystać z opcji systemu plików sugerowanej przez @peter.
Wiele rzeczy różni się w obecnej implementacji launchctl
i <service-target>
jest to trochę dziwne. Załóżmy na przykład, że mam skonfigurowaną usługę lokalną ~/Library/LaunchAgents/dev.localmon.plist
, która ma „etykietę” dev.localmon
. To <service-target>
jest gui/$UID/dev.localmon
, gdzie $UID
jest twój identyfikator użytkownika, który, ponieważ uruchamiasz to w CLI, twoja powłoka interpoluje dla ciebie.
Załóżmy więc, że moja dev.localmon
usługa uległa awarii podczas uruchamiania (tak było), mógłbym wywołać następujące polecenie, aby launchctl
przepuścić stdout procesu i stderr do mojej powłoki przy następnym (i tylko następnym razem) uruchomieniu usługi:
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Ponieważ zawiesza się z otwartymi i gotowymi terminalami TTY, przejdź do innego terminala i uruchom:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
Następnie, z powrotem w pierwszym terminalu, powinieneś zobaczyć wynik. (Dziwne, nie zamyka się, gdy proces usługi umiera, więc musisz nacisnąć Ctrl + C).
Btw, po naprawieniu pliku konfiguracyjnego za pomocą PATH lub środowiska, które wcześniej przerywało usługę, nadal musisz użyć starego launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
dwuetapowego kroku, ponieważ rzekoma uncache
komenda dokumentacji ma następujący efekt:
Polecenie nie zostało jeszcze zaimplementowane.
Yay dla strategii Apple po opublikowaniu oferty pracy: „Poruszaj się szybko i niszcz rzeczy”
sudo launchctl debug
wychodzi ze Could not find domain for
mną