macOS Ventura 13.4.1下Launch Daemon重启后无法加载的求助
macOS Ventura 13.4.1下Launch Daemon重启不加载的修复方案
问题背景
原本可随Mac重启自动加载的Launch Daemon,在升级到macOS Ventura 13.4.1后失效。排查发现plist文件带有com.apple.quarantine隔离属性,执行sudo xattr -d com.apple.quarantine移除属性后,问题仍未解决。
plist文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.me.dowork</string> <key>WorkingDirectory</key> <string>/Users/me</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/python3.9</string> <string>/usr/local/bin/dowork_daemon</string> </array> <key>StartCalendarInterval</key> <array> <dict> <key>Minute</key> <integer>00</integer> <key>Hour</key> <integer>14</integer> <key>Weekday</key> <integer>1</integer> </dict> <dict> <key>Minute</key> <integer>00</integer> <key>Hour</key> <integer>14</integer> <key>Weekday</key> <integer>4</integer> </dict> </array> <key>UserName</key> <string>me</string> <key>StandardErrorPath</key> <string>/Users/me/workdir/dowork.err</string> <key>StandardOutPath</key> <string>/Users/me/workdir/dowork.out</string> </dict> </plist>
排查与修复步骤
1. 检查所有扩展属性
除隔离属性外,可能存在其他限制属性(如com.apple.macl),执行命令查看完整属性列表:
sudo xattr -l /Library/LaunchDaemons/org.me.dowork.plist
若发现可疑属性,用sudo xattr -d 属性名 文件名移除。
2. 验证plist语法正确性
plist语法错误会被launchd拒绝加载,执行验证命令:
plutil -lint /Library/LaunchDaemons/org.me.dowork.plist
输出OK则语法正常,否则根据提示修复XML格式问题。
3. 手动加载并测试
直接手动加载daemon,查看是否有报错:
# 加载daemon sudo launchctl bootstrap system /Library/LaunchDaemons/org.me.dowork.plist # 检查加载状态 launchctl list | grep org.me.dowork
加载失败时终端会直接输出错误信息,按提示修复(如路径不存在、权限不足等)。
4. 检查程序与目录权限
- 确认
/usr/local/bin/python3.9和/usr/local/bin/dowork_daemon存在且有可执行权限:
权限不足时执行ls -l /usr/local/bin/python3.9 /usr/local/bin/dowork_daemonsudo chmod +x /usr/local/bin/dowork_daemon添加可执行权限。 - 确认
/Users/me/workdir目录存在且用户me有读写权限:
目录不存在时执行ls -ld /Users/me/workdirmkdir -p /Users/me/workdir && chown me:staff /Users/me/workdir创建并设置权限。
5. 查看系统日志定位问题
通过系统日志查看launchd加载daemon的具体错误:
log show --predicate 'process == "launchd" && contains(message, "org.me.dowork")' --info --last 1h
日志会明确显示加载失败原因(如权限被拒、路径错误、依赖缺失等),针对性修复即可。
6. 确保daemon已启用
执行命令确保daemon处于启用状态:
sudo launchctl enable system/org.me.dowork
重启Mac后,再次用launchctl list | grep org.me.dowork验证是否自动加载。
内容的提问来源于stack exchange,提问作者robt
相关产品推荐
相关产品推荐

