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

35

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

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

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

Сорин
источник

Ответы:

26

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

 sudo launchctl log level debug 

и после этого

 tail -f /var/log/system.log
Сорин
источник
1
Я понял, что эта ОС требует администратора, как и все остальное. Полностью искал это после дня крика "WTF, где многословный флаг!" OSX рулит, конечно, но сложно разобраться. Thx +1
chiggsy
Следуйте, FYI: Это работает и с OS X 10.7.2. Спасибо.
Алан В. Смит
У меня были проблемы с моими серверами Leopard, и я подумал, что с моим launchd plist что-то не так (хотя тот же список работает в Snow Leopard). Я случайно наткнулся на это, и это работает как шарм :)
icasimpan
27
Это больше не работает с 10.10 Йосемити. версия launchctl: Darwin System Bootstrapper 2.0.0: вт 9 сентября 16:30:56 PDT 2014
JeanMertz
9
@JeanMertz - есть альтернатива?
Уманг
20

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

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

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

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

Питер
источник
17

На 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 после выхода на работу: «Двигайся быстрее и ломай вещи»

chbrown
источник
sudo launchctl debugвыходит Could not find domain forдля меня
Том