我正在设置一个 launchctl 服务器来定期运行 python 文件。所以我写了一个.plist文件,auto.sh文件,它运行良好。但是,在我安装 Macos Catalina 后,它失败了。我在 auto.sh 中写了“ls -l”来检查文件权限,日志显示:
ls: .: Operation not permitted
python3: can't open file 'auto.py': [Errno 1] Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决它?非常感谢。
这是我的代码:
自动.sh:
ls: .: Operation not permitted
python3: can't open file 'auto.py': [Errno 1] Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我把这样的 .plist 文件放在 /Users/gassy/Library/LaunchAgents/com.gassy.fangzhou.plist
...
<key>Program</key>
<string>/Users/gassy/auto/launch.sh</string>
...
Run Code Online (Sandbox Code Playgroud)
小智 16
终于想通了...
这是一个与 Catalina 新权限系统相关的问题,/bin/bash
需要有[全盘访问]。
本着最小特权原则的精神:
如果您不想提供bash
完整磁盘访问权限,您可以创建一个二进制包装器。
创建 C 源代码文件launch.c
。
#include <stdlib.h>
int main(void) {
int status = system("/path/to/launch.sh");
int ret = WEXITSTATUS(status);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
然后将其编译为launch
.
gcc -Wall -o launch launch.c
Run Code Online (Sandbox Code Playgroud)
授予其完全磁盘访问权限,将其添加到 launchd 属性列表文件中。
我认为你遇到的问题不在于Python,而在于文件权限auto.py
或通向它的路径。使用什么用户帐户来运行脚本?该用户是否对这些可执行文件和父目录拥有必要的权限?我怀疑目录权限的原因是它ls
与auto.py
.
如果您将所有内容移出/Users/gassy/Documents
或移至另一个位置(可能位于/opt
或/var
或类似位置),然后确保权限正常,您可能会运气好。我知道 Macos 对其中一些董事给予/Users/<user>
特殊对待,有时甚至以一种不太有帮助的方式......
归档时间: |
|
查看次数: |
4760 次 |
最近记录: |