Answers:
我找到了解决方案
sudo launchctl log level debug
在此之后
tail -f /var/log/system.log
如果您在启动的plist文件中包含以下几行,则假设您要尝试记录自己的进程而不是自行启动。
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
并重新加载该过程,只要脚本运行,您在脚本内部进行的任何日志记录或打印都将捕获在这两个文件之一中。虽然旋转文件似乎由您决定。如您所料,如果在两个实例中都使用相同的文件,它将把error和stdout记录到同一位置。
请参阅:创建启动守护程序和代理程序中的:调试启动的作业。
在OS X 10.11(El Capitan)上,sudo launchctl debug <service-target> --stdout --stderr
如果您不想使用@peter建议的文件系统选项,则可以启用一次性记录。
当前的实现中有很多不同之处launchctl
,并且<service-target>
有点奇怪。例如,假设我有一个在本地配置的本地服务~/Library/LaunchAgents/dev.localmon.plist
,该服务具有“ label” dev.localmon
。它<service-target>
是gui/$UID/dev.localmon
,$UID
您的用户ID 在哪里,由于您在CLI上运行它,因此您的外壳程序将为您插值。
因此,假设我的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
子命令具有以下作用,您仍然必须使用旧的两步操作:
命令尚未实现。
Yay对于Apple的工作后发布策略:“快速行动,打破常规”
sudo launchctl debug
和Could not find domain for
我一起退出