设置KeepAlive为true后,进程终止仍无法自动重启求助
macOS Launchd plist KeepAlive 不生效的排查与修复
核心问题排查与修复步骤
1. 路径空格解析错误
你的ProgramArguments中路径包含空格(COMPANY_NAME PRODUCT_NAME.app),直接作为单个字符串会被launchd拆分识别,导致无法定位程序。
修复方式:将带空格的路径拆分为数组元素:
<key>ProgramArguments</key> <array> <string>/Applications/COMPANY_NAME</string> <string>PRODUCT_NAME.app/Contents/MacOS/PRODUCT_NAME</string> </array>
2. Label命名不规范
launchd要求Label为全小写反向域名格式,你的com.dra.inycAent包含大写字母,建议修改为com.dra.inyncagent,避免识别异常。
3. 文件位置与权限问题
- plist必须放在对应目录:
- 用户级:
~/Library/LaunchAgents/ - 系统级:
/Library/LaunchAgents/(需sudo权限)
- 用户级:
- 确保文件权限为
644,执行命令修改:chmod 644 ~/Library/LaunchAgents/com.dra.inyncagent.plist
4. KeepAlive 行为限制
默认KeepAlive = true仅在进程意外崩溃时触发重启,用户主动终止(如Activity Monitor手动退出、kill命令)不会生效。若需无论何种终止方式都重启,替换为字典配置:
<key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict>
该配置表示即使进程正常退出(返回码0),也会强制重启。
5. 重新加载与状态验证
修改plist后必须重新加载:
# 卸载旧配置 launchctl unload ~/Library/LaunchAgents/com.dra.inyncagent.plist # 加载新配置 launchctl load ~/Library/LaunchAgents/com.dra.inyncagent.plist
查看服务运行状态:
launchctl list | grep com.dra.inyncagent
若启动失败,查看系统日志定位问题:
log show --predicate 'process == "launchd" && subsystem == "com.apple.launchd"' --info --last 10m
内容的提问来源于stack exchange,提问作者Rushikesh Korde
相关产品推荐
相关产品推荐

