launchctl可精准管理当前用户所有launchagent,操作均作用于~/library/launchagents/下plist文件,无需root权限;支持list查看、load/unload加载卸载、start/stop启停、print调试等完整生命周期控制。

你可以用 launchctl 命令精准管理当前用户的所有 LaunchAgent,包括查看、加载、卸载、启停和调试。这些操作都作用于 ~/Library/LaunchAgents/ 目录下的 plist 文件,只影响你当前登录的用户,无需管理员权限。
查看所有已加载的用户级 LaunchAgent
运行以下命令列出当前用户所有已加载的代理及其状态:
-
launchctl list—— 显示 PID、状态码(0 表示正常运行)、Label 名称 -
ls ~/Library/LaunchAgents/—— 查看有哪些 .plist 文件存在(未必都已加载) -
launchctl list | grep -v "0$" | grep -v "com.apple"—— 快速筛选非系统、非正常运行的项
加载或卸载某个 LaunchAgent
加载是让系统识别并准备启动该任务;卸载则停止运行并取消开机自动加载:
- 加载:
launchctl load ~/Library/LaunchAgents/com.example.app.plist - 卸载:
launchctl unload ~/Library/LaunchAgents/com.example.app.plist - 如果想加载后立即运行(即使未设
RunAtLoad),可补一句:launchctl start com.example.app
启停正在运行的代理服务
加载 plist 不等于服务立刻运行,尤其当它依赖条件(如网络就绪)时。你可以手动触发:
- 启动:
launchctl start com.example.app - 停止:
launchctl stop com.example.app - 重启(先停再启):
launchctl kickstart -k gui/$(id -u)/com.example.app
检查配置细节与调试日志
当某个代理不启动或异常退出,可通过以下方式定位问题:
- 查看完整配置与运行上下文:
launchctl print gui/$(id -u)/com.example.app - 确认标准输出/错误路径是否已配置(需在 plist 中声明
StandardOutPath和StandardErrorPath) - 手动执行脚本验证逻辑:
/bin/zsh -c 'source ~/.zshrc; /path/to/script.sh' - 若无日志,临时在 plist 的
<dict></dict>内添加重定向条目,再 reload











