sor*_*rin 46 mac-osx launchd launchctl
如何在 OS X 10.6 上激活启动日志?
我添加了一个无法正常启动的新守护进程(状态为1
)。
我想调试问题,但找不到launchd
日志,它们不在/var/log/launchd.log
.
小智 31
假设您正在尝试记录您的进程而不是 launchd 本身,如果您在 launchd plist 文件中包含以下几行:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
Run Code Online (Sandbox Code Playgroud)
并重新加载该过程,无论何时运行,您的脚本内部的任何日志记录或打印都将被捕获在这两个文件之一中。尽管旋转文件似乎取决于您。正如您所料,如果您在两个实例中使用相同的文件,它会将错误和标准输出记录到同一位置。
sor*_*rin 29
我找到了解决方案
sudo launchctl log level debug
Run Code Online (Sandbox Code Playgroud)
在这之后
tail -f /var/log/system.log
Run Code Online (Sandbox Code Playgroud)
chb*_*own 21
在 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 上运行它,您的 shell 将为您进行插值。
因此,假设我的dev.localmon
服务在启动时崩溃(确实如此),我可以调用以下内容,以便launchctl
在下一次(并且仅在下一次)服务启动时将进程的 stdout 和 stderr通过管道传输到我的 shell 中:
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Run Code Online (Sandbox Code Playgroud)
由于这与开放就绪的 TTY 相关,请转到另一个终端并运行:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
Run Code Online (Sandbox Code Playgroud)
然后,回到第一个终端,你应该看到输出。(奇怪的是,当服务进程终止时它不会关闭,因此您必须按 Ctrl-C。)
顺便说一句,一旦您使用之前破坏服务的任何 PATH 或环境修复了配置文件,您仍然必须使用旧launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
的两步,因为文档中声称的uncache
子命令具有以下效果:
命令尚未执行。
苹果的后乔布斯发布策略是:“快速行动,打破常规”
归档时间: |
|
查看次数: |
43867 次 |
最近记录: |