当我在 macos catalina 中使用 launchctl 时如何修复“不允许操作”

Luc*_*cas 10 python macos sh

我正在设置一个 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 纳入该列表:https://apple.stackexchange.com/questions/376474/enabling-bin-bash-on-catalina-invisible-to-system-preferences-security-p (2认同)

Ste*_*idt 5

本着最小特权原则的精神:

如果您不想提供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 属性列表文件中。


Z4-*_*ier 1

我认为你遇到的问题不在于Python,而在于文件权限auto.py或通向它的路径。使用什么用户帐户来运行脚本?该用户是否对这些可执行文件和父目录拥有必要的权限?我怀疑目录权限的原因是它lsauto.py.

如果您将所有内容移出/Users/gassy/Documents或移至另一个位置(可能位于/opt/var或类似位置),然后确保权限正常,您可能会运气好。我知道 Macos 对其中一些董事给予/Users/<user>特殊对待,有时甚至以一种不太有帮助的方式......