没事每天换个桌面壁纸,这是我最常干的事了,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...
桌面也看到直接更新,问题解决。
文章评论