我可以使用 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 add
和 git commit
。这让我很困惑,因为它是我的用户 crontab,而 git repo 位于我的主目录中。有什么想法吗?
顺便说一句,我正在运行 macOS Big Sur 11.4 并已授予 iTerm 完整磁盘访问权限。
【问题讨论】:
可能它是在您的用户无权访问的工作目录下运行的,在运行git
之前尝试cd
进入一个已知的正常目录
嗯,cd
ing 进入项目目录似乎工作正常,只是 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(通配符)注入提权)