Как мне активировать запуск журнала в OS X?

Как мне активировать запуск журнала в OS X 10.6?

Я добавил нового демона, который не запускается должным образом (статус 1).

Я хочу отладить проблему, но я не смог найти launchd логи, их нет в /var/log/launchd.log,

3 ответа

Предполагая, что вы пытаетесь зарегистрировать свой процесс, а не сам по себе launchd, если вы включите следующие строки в файл launchd plist:

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>

и перезагрузите процесс, все журналы или распечатки, которые у вас есть внутри вашего скрипта, будут записываться в один из этих двух файлов при каждом его запуске. хотя вращение файлов кажется вам решать. Как и следовало ожидать, если вы используете один и тот же файл в обоих случаях, он будет записывать и ошибку, и стандартный вывод в одно и то же место.

См. Раздел " Отладка запущенных заданий" в разделе "Создание демонов и агентов запуска".

Я нашел решение

 sudo launchctl log level debug 

и после этого

 tail -f /var/log/system.log

На OS X 10.11 (El Capitan) вы можете использовать sudo launchctl debug <service-target> --stdout --stderr включить одноразовое ведение журнала, если вы не хотите использовать опцию файловой системы, предложенную @peter.

Много вещей отличается в текущей реализации launchctlи <service-target> это немного странно Например, предположим, у меня есть локальный сервис, который я настраиваю на ~/Library/LaunchAgents/dev.localmon.plist, который имеет "ярлык" dev.localmon, это <service-target> является gui/$UID/dev.localmon, где $UID это ваш идентификатор пользователя, который, поскольку вы запускаете его в CLI, ваша оболочка будет интерполировать для вас.

Итак, предположим, мой dev.localmon служба зависала при запуске (это было), я мог бы вызвать следующее, чтобы иметь launchctl В следующий раз (и только в следующий раз) служба запустит службу stdout и stderr в мою оболочку:

sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr

Так как это зависает с открытыми и готовыми TTY, перейдите в другой терминал и запустите:

launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation

Затем, вернувшись в первый терминал, вы должны увидеть результат. (Как ни странно, он не закрывается, когда процесс службы умирает, поэтому вам придется Ctrl-C.)

Кстати, после того, как вы исправите свой конфигурационный файл с какой бы то ни было PATH или средой, которая раньше ломала службу, вам все равно придется использовать старый launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist двухэтапный, так как документация подразумевается uncache Подкоманда имеет следующий эффект:

Команда еще не реализована.

Yay для стратегии выпуска Apple после выхода на работу: "Двигайся быстрее и ломай вещи"

Другие вопросы по тегам