如何在 OS X 上激活 launchd 日志记录?

如何在 OS X 上激活 launchd 日志记录?

如何在 OS X 10.6 上激活 launchd 日志记录?

我添加了一个无法正常启动的新守护进程(状态为1)。

我想调试该问题,但我找不到launchd日志,它们不在/var/log/launchd.log

答案1

假设您尝试记录您的进程而不是 launchd 本身,如果您在 launchd plist 文件中包含以下几行:

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

并重新加载该过程,脚本内部的任何日志记录或打印都将在运行时捕获到这两个文件之一中。虽然轮换文件似乎取决于您。正如您所料,如果在两个实例中使用相同的文件,它会将错误和标准输出记录到同一个位置。

看:创建启动守护进程和代理中的调试 launchd 作业部分

答案2

我找到了解决方案

 sudo launchctl log level debug 

在此之后

 tail -f /var/log/system.log

答案3

在 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是您的用户 ID,由于您在 CLI 上运行它,因此您的 shell 将为您插入。

因此,假设我的dev.localmon服务在启动时崩溃了(确实如此),我可以调用以下命令,在launchctl服务下次启动时(且仅在下次启动时)将进程的 stdout 和 stderr 通过管道传输到我的 shell 中:

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子命令具有以下效果:

命令尚未执行。

乔布斯离职后,苹果的战略是“快速行动,打破常规”

相关内容