Назад | Перейти на главную страницу

Как активировать ведение журнала launchd в OS X?

Как активировать ведение журнала launchd в OS X 10.6?

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

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

Предполагая, что вы пытаетесь регистрировать свой процесс, а не сам запуск, если вы включите следующие строки в файл 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 это ваш идентификатор пользователя, который, поскольку вы запускаете его в интерфейсе командной строки, ваша оболочка будет интерполировать за вас.

Предположим, мой 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 подкоманда имеет следующий эффект:

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

Да здравствует стратегия Apple после публикации вакансий: «Двигайся быстро и ломай вещи»