因为项目需要Xcode,但是Xcode又必须要在10.15以上的系统下运行,不得已更新了系统,然而更新一时爽,bug修复***。真的是出现了各种问题,没办法,挨个解决叭…

#起因

为了方便电脑自动化整理文档,我的电脑上一直运行着一堆定时的脚本,用来隔一段时间将截图整理到图片文件夹。有人这里可能会问,为什么不直接把截图目录设置成Pictures目录,因为截图在桌面用起来更方便诶,毕竟截图就是为了发出去或者做什么的不是。

但用完所有截图都在桌面真的好乱。

所以我之前版本的定时脚本都是:

1
2
3
$ crontab -l
30 */1 * * * bash /Users/onns/Documents/code/bash/clear
0 22 * * * bash /Users/onns/Documents/code/bash/backup

在更新系统之前一直都可以正常运行,但更新了之后

1
2
3
4
5
You have new mail.
$ cat /var/mail/onns
...
bash: /Users/onns/Documents/code/bash/clear: Operation not permitted
...

这个的原因就是苹果更新了System Integrity Protection功能,具体的可以去看官方的公告:About System Integrity Protection on your Mac,所以最简单粗暴的解决方案就是关闭SIP

但我觉得,苹果既然出于安全考虑推出了这样一个功能,那就尽量遵从苹果的思路来,毕竟你后面还要更新系统,难道每次都关一次?何况关起来还挺麻烦的。。。也不安全。

同时你会留意到,系统安全隐私里增加了一项权限划分Full Disk Access,大概也是出于安全考虑吧。

Full Disk Access页面

这是我修复bug之后的截图了,最开始的时候这里面什么都没有。

还有就是,打开Terminal的时候,会弹出下列信息:

1
2
3
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.

详细可以去官网看:Use zsh as the default shell on your Mac

所以总结来说,定时脚本出错的原因有两点:

  1. 苹果更改了默认的shell工具
  2. shell工具的权限不够
  3. crontab的权限不够(自我猜测,不知道这点是不是影响因素)

#解决

#更改shell

这一点很好操作,首先先将zsh作为默认的shell工具。

1
chsh -s /bin/zsh

然后只需要重启一下Terminal就可以了。

然后修改一下定时任务。

1
2
3
% crontab -e
30 */1 * * * zsh /Users/onns/Documents/code/bash/clear
0 22 * * * zsh /Users/onns/Documents/code/bash/backup

然后我这样又试了一下,还是报错了:

1
zsh: can't open input file: /Users/onns/Documents/code/bash/clear

所以还是需要给zsh权限

#赋予Full Disk Access权限

  1. 打开System Preference -> Security & Privacy -> Privacy
  2. 找到Full Disk Access
  3. 点击左下角的锁头🔒解锁更改权限,输入密码。
  4. 点击添加按钮,在弹出的文件浏览页面按住cmd+shift+G,输入/bin,点击go来到/bin目录并选择zsh,添加。
  5. 同理在/usr/sbin/目录下找到cron,添加。

成功,完。

#参考文档