- 环境: Mac OS 10.15.7
先说解决办法: 将/bin/bash加入到辅助功能中的全磁盘访问的权限
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>Test</string>
<key>ProgramArguments</key>
<array>
<string>/Users/Test/Documents/Bnn/test.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
使用 launchctl start Test
启动服务 发现test.sh
脚本并未启动起来 输入launchctl list | grep Test
查看下状态 发现错误码为 126
输入launchctl error 126
查看错误码说明 并没有得到什么有用的说明 将执行脚本错误输出 修改一下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>Test</string>
<key>ProgramArguments</key>
<array>
<string>/Users/Test/Documents/Bnn/test.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/test.err</string>
</dict>
</plist>
再次启动 发现显示错误operation not permitted
以为是权限问题 将test.sh脚本权限都给 发现还是没用
最终在这找到了答案
https://apple.stackexchange.com/questions/392789/launchctl-plist-has-a-stderr-that-talks-about-how-getcwd-operation-not-permitted
原因就是因为苹果的沙盒机制 导致没办法访问Documents目录 解决办法有两个
- 将执行的脚本test.sh移出到Documents外面
- 将/bin/bash给全磁盘访问权限
另外可以用launchcontrol
这个工具可视化的编辑mac的开机启动项服务 brew安装即可
brew install launchcontrol