没事每天换个桌面壁纸,这是我最常干的事了,windows下的小工具用了几年了,mac下之前有个脚本找不到了,最近发现壁纸很久没更新了,于是重新找了一个bing-wallpaper脚本,手动执行正常,放crontab下,定时执行就报错
13 13 * * * cd $HOME/Documents/ && ./bing-wallpaper.sh >/tmp/stdout.log 2>/tmp/stderr.log
问题现象
报错 /bin/bash: ./bing-wallpaper.sh: Operation not permitted,
看了好几眼文件权限,都是正常的,有执行权限,文件分组也是正常的。
% ls -l bing-wallpaper.sh
-rwxr-xr-x  1 wanjie  staff  3147 10 15 12:46 bing-wallpaper.sh
差异
ps. 诡异的是同样计划任务,家里的iMac 系统 10.15.6,执行正常, 这台Macbook 系统是 10.15.4 ,眼看解决不了,
搜索了一下,找到这篇 https://onns.xyz/blog/2020/06/10/fix-crontab-operation-not-permitted-on-mac/ 原来是系统更新后磁盘权限问题。
再次查看家里电脑,原来是早就关闭了SIP,源头上避免了这个问题出现,哈哈。
检查SIP状态命令 csrutil status
得到结果 System Integrity Protection status: disabled.
界面查看SIP情况

解决方法
#赋予Full Disk Access权限
- 打开系统偏好设置 -> 安全性与隐私 -> 隐私。
- 找到完全磁盘访问权限。
- 点击左下角的锁头🔒解锁更改权限,输入密码。
- 点击添加按钮,在弹出的文件浏览页面按住cmd+shift+G,输入/bin,点击go来到/bin目录并选择zsh,添加。
- 同理在/usr/sbin/目录下找到cron,添加,如下图。

测试下来,似乎拿掉 bash,只保留新加的 cron 磁盘权限即可。
到了设定时间,首次执行时会弹出这个权限许可,同意即可。

查看cron临时日志,有类似下载成功过程日志输出
% cat /tmp/stderr.log
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100  336k  100  336k    0     0  1945k      0 --:--:-- --:--:-- --:--:-- 1945k
% cat /tmp/stdout.log
Downloading: OHR.WorldFoodDay_ZH-CN0834763150_1920x1080.jpg...
桌面也看到直接更新,问题解决。
文章评论