如何在 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>
并重新加载该过程,脚本内部的任何日志记录或打印都将在运行时捕获到这两个文件之一中。虽然轮换文件似乎取决于您。正如您所料,如果在两个实例中使用相同的文件,它会将错误和标准输出记录到同一个位置。
答案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
子命令具有以下效果:
命令尚未执行。
乔布斯离职后,苹果的战略是“快速行动,打破常规”