我可以使用 Cron 在 macOS 上安排每日提交吗?

Posted

技术标签:

【中文标题】我可以使用 Cron 在 macOS 上安排每日提交吗?【英文标题】:Can I use Cron to schedule a daily commit on macOS? 【发布时间】:2021-09-17 19:08:03 【问题描述】:

我目前正在处理一个项目,我想每天提交一个回购协议作为第三次备份。我编写了以下小脚本来快速提交当天的更改:

REPO_PATH="/Users/niekvandepas/my-project"
git -C "$REPO_PATH" add -A
git -C "$REPO_PATH" commit -m "`date`"

脚本按预期工作,使用时间戳提交我当天的更改。现在我希望能够每天自动运行这个脚本。我尝试为此使用cron,但我遇到了一个关于(我认为)目录或文件权限的问题。

我已将上述脚本放入/usr/local/bin/commitscript.sh 并验证它仍然有效。然后,我将以下行添加到我的用户 crontab(crontab -e,没有 sudo):

0 10 * * * /usr/local/bin/commitscript.sh > /tmp/cron.log 2> /tmp/cron.err

但是,当 10:00 到来时,我的更改没有提交,/tmp/cron.err 有以下几行:

fatal: Unable to read current working directory: Operation not permitted
fatal: Unable to read current working directory: Operation not permitted

我假设这两个都是致命的 git 错误,分别是 git addgit commit。这让我很困惑,因为它是我的用户 crontab,而 git repo 位于我的主目录中。有什么想法吗?

顺便说一句,我正在运行 macOS Big Sur 11.4 并已授予 iTerm 完整磁盘访问权限。

【问题讨论】:

可能它是在您的用户无权访问的工作目录下运行的,在运行git之前尝试cd进入一个已知的正常目录 嗯,cding 进入项目目录似乎工作正常,只是 git 命令给我带来了麻烦。 您是否尝试像使用 iTerm 一样授予对 cron 本身的访问权限(例如,全盘访问)? @Matt 我检查了,但我没有看到 cron 在安全和隐私设置中请求 FDA。 尝试手动添加,看看错误是否依然存在。由于 cron 作业在后台运行,因此该条目可能不会自动添加到列表中。 【参考方案1】:

您可能需要像使用 iTerm 一样手动授予 cron 可执行文件所需的访问权限。这有时是必要的,因为 cron 作业在后台运行,并且可能需要自己授权才能访问某些资源。

要授予/usr/sbin/cron 完整磁盘访问权限,您可以打开系统偏好设置,导航到安全和隐私,在标签中选择隐私 -bar 并选择左侧边栏上的 Full Disk Access。然后点击+按钮,搜索并选择可执行文件/usr/sbin/cron并点击打开

这将在应用列表中添加一个条目,您的 cronjob 现在应该具有所需的权限。这是系统偏好设置中面板的屏幕截图:

【讨论】:

只是指出如果在尝试授予权限时看不到/usr/sbin文件夹,可以Cmd+Shift+G直接键入文件夹位置apple.stackexchange.com/a/83006

以上是关于我可以使用 Cron 在 macOS 上安排每日提交吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google Cloud DataProc 上安排 cron 作业

Linux提权第四篇-Linux Cron Jobs(任务计划)提权(crontab文件覆盖提权Crontab Tar Wildcard(通配符)注入提权)

在不使用 CRON 的情况下安排脚本

在詹金斯上安排两周一次的工作

安排在不同时间执行两次的 cron 作业(AWS Beanstalk)

每日一书|iOS和macOS安全宝典来袭