MacOS Sonoma cron 作业无法访问 ~/.Trash,即使它具有完整的系统访问权限

问题描述 投票:0回答:1

编辑:MacOS Sonoma 版本 14.2.1

我正在通过 crontab 运行 python 脚本,并且脚本运行,但在尝试迭代 ~/.Trash 目录时出现错误:

PermissionError: [Errno 1] Operation not permitted: '/Users/me/.Trash'

我已经启用了完整磁盘访问:/usr/sbin/cron、/usr/bin/crontab 和terminal.app,但仍然有同样的问题。

如果我直接运行命令,它工作正常,但是当 cron 运行它时,我收到上面的错误。我尝试了一些不同的 crontab 条目,但从所有这些条目中得到了相同的结果(我直接运行了每个版本,并且每个版本在不通过 cron 运行时都工作正常)。

  1. */5 * * * * /Users/me/miniforge3/envs/dev/bin/fclean >> /dev/null 2>&1

  2. */5 * * * * /Users/me/miniforge3/envs/dev/bin/python /Users/me/miniforge3/envs/dev/bin/fclean >> /dev/null 2>&1

  3. */5 * * * *  /Users/me/miniforge3/envs/dev/bin/python /Users/me/path/to/file.py >> /dev/null 2>&1

如果有帮助的话,引发权限问题的Python函数是:

def clean_folder(folder: Path, _time: int = days(30)) -> None:
    """
    If a file in the specified path hasn't been accessed in the specified days; remove it.

    Args:
        folder (Path): Path to folder to iterate through
        _time (int): optional time parameter to pass as expiration time.

    Returns:
        None
    """

    for file in folder.iterdir():
        if expired(file, _time):
            try:
                rm_files(file)
            except PermissionError as permission:
                logging.exception(permission)
                continue
            except Exception as _err:
                logging.exception(_err)
                continue
python macos cron permissionerror
1个回答
0
投票

我在苹果开发者论坛中交叉发布了这个问题:这里

在其中一个回复中,我链接到了一个非常好的线索,它有助于解释正在发生的一些事情:这里

这是最适合这种情况的片段。

脚本

MAC 给脚本编写带来了一些严峻的挑战,因为脚本是由解释器运行的,系统无法区分解释器完成的文件系统操作和脚本完成的操作。例如,如果您有一个脚本需要操作桌面上的文件,您就不会希望授予解释器该权限,因为任何脚本都可以执行此操作。

此问题最简单的解决方案是将脚本打包为 MAC 可用于跟踪的独立程序。这可能很容易也可能很困难,具体取决于特定的脚本环境。例如,AppleScript 可以轻松地将脚本导出为签名应用程序,但对于 shell 脚本而言并非如此。

我能够为 python 解释器提供全磁盘访问,并允许 cron 运行 python 脚本并访问 ~/.Trash 目录。

正如 @eskimo1 在文章中指出的那样 - 这意味着在该环境中运行的任何脚本都具有完全磁盘访问权限。所以我将来会考虑为我的脚本创建一个包。

© www.soinside.com 2019 - 2024. All rights reserved.