我需要监视
Users/<user name>/Libraries/Developer/Xcode/DerivedData
中的特定文件夹。我编写了一个脚本,该脚本应始终在后台运行以监视文件夹。当我们尝试从启动的访问
Users/
中的任何内容时,我似乎遇到了权限问题
我尝试按照此Apple 论坛讨论中提到的步骤设置一个启动守护程序来调用特定脚本。
脚本
logger 'Hello Cruel World!'
脚本保存在路径 -
/usr/local/bin/greetings.sh
启动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>com.example.hello</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/greetings.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
plist 保存在路径 -
/Library/LaunchDaemons
执行加载启动并提供权限的命令
sudo chmod +x /usr/local/bin/greetings.sh
-> 制作脚本
可执行并授予根级别权限。sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.hello.plist
sudo launchctl start com.example.hello
通过
log show —predicate 'process == "logger"' —info | grep "Hello Cruel World"
打印日志时,我可以看到 Hello Cruel World
正在打印。
在我的初步调查中,我怀疑问题可能在于脚本所具有的权限。
当脚本处于
/usr/local/bin
-> 时
ls -l /usr/local/bin/greetings.sh
-rwxr-xr-x 1 root wheel <Date> /usr/local/bin/greetings.sh
当脚本处于
/Users/<user_name>/Desktop
-> 时
/Users/<user>/Desktop/greetings.sh
-rwxr-xr-x@ 1 root staff 40 <date> /Users/<user>/Desktop/greetings.sh
区别在于工作人员和轮级权限之间。
我是否缺少明确执行的操作,以向脚本授予对位置
Users/<user>
中对文件执行 CRUD 等操作的脚本的适当权限?根据我的理解sudo
权限应该可以完成这项工作。
转到系统设置/隐私和安全/完整磁盘访问权限并授予脚本对完整磁盘的访问权限。
我认为脚本的位置并不重要,但许多 LaunchDaemon 使用 /Library/Application Support/... 作为其可执行文件。
在某些 Mac 上,我必须等待存储安装,因此我没有直接执行脚本,而是使用类似的命令执行 sh
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>while [ ! -x /Users/Shared/MyScript.sh ]; do echo StartWait; sleep 6; done; sleep 5; /Users/Shared/MyScript.sh arguments</string>
</array>