Mac Catalina 上 Crontab 和 Rsync 失败的原因

当计算机突然停止按计划执行任务时,往往会让人感到困惑。最近我也碰到了这样的问题,发现我的Crontab任务中的rsync不再按预期工作。这是怎么回事呢?

错误信息告诉我:

rsync: opendir “/Users/<USERNAME>/Library/Mobile Documents/iCloud/md-obsidian/Documents/Zen” failed: Operation not permitted (1)”

随后又提示了“IO error encountered — skipping file deletion

但是,在终端中手动执行这个任务却没有问题。这使我开始怀疑是不是我遇到了某种权限问题。果不其然,经过仔细检查,我发现问题出在了我升级到Mac Catalina版本后的系统权限上。

解决方法其实并不复杂。我打开了“System Preferences(系统偏好设置)” > “Security & Privacy(安全与隐私)” > “Privacy(隐私)” > “Files and Folders(文件和文件夹)”,然后将crontab和rsync添加到允许访问的列表中。找到隐藏文件夹也变得简单,只需在Finder中按下Command+Shift+G组合键,就能直达目的地。

Pasted Graphic

要查找Cron的位置,可以在终端中运行/usr/sbin/cron命令;而rsync的位置可以通过which rsync命令直接找到,我的是在/opt/homebrew/bin/rsync。这样一来,即使是最隐蔽的文件和命令,也无处可藏。