crontab -l 内容如下,同时也是 /etc/crontab 内容
1 * * * * /bin/date >> /Users/fei/Documents/crontab/a.txt
1 * * * * /Users/fei/Documents/work/note/commitNote.bash
第一条为测试内容,将当前时间写入文件,执行成功,第二条为自动提交 git 脚本,执行失败(或未执行 )内容如下
#!/bin/bash
/bin/date >> /Users/xurunfei/Documents/crontab/b.txt
cd '/Users/xurunfei/Documents/work/note'
git add .
git commit -am 'update'
git pull origin master
git push origin master
crontab log 找不到,网上查到说是在 /var/spool/cron/tmp 中,但是我没有查到 spool 中有 cron 文件夹
1
IgniteWhite 2020-07-13 05:27:37 +08:00
本菜鸡抛砖引玉吧,请楼主测试,欢迎大家指正讨论:
首先假设楼主解决了脚本权限问题,也把 cron 命令的位置( macOS 一般是 /usr/sbin/cron )通过系统设置 app 给了 Full Disk Access 权限(这个很重要,要在这里特别地给 cron 提权,和 linux 不一样); 另外一个是关于 /etc/crontab 这个,/etc/crontab 里存的是 system wide 的 cron 任务,如果编辑当前用户的 cron 任务,使用的是 crontab -e 命令。这个也许和楼主问题的解决无关; 第三个事是关于 crontab 的内容本身,有可能是楼主的问题所在。一般来说,crontab (尤其是系统级别的 /etc/crontab )头两行会定义 SHELL 和 PATH 两个环境变量,比如: SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 这个例子里的 PATH 有六项,第三四项是系统的 binary,第五六项是用户的 binary,而第一二项一般来说是 homebrew 的 binary 。如果楼主的 git 是用 brew 装的,crontab 又没有明确写 PATH,cron 就找不到 git 这个命令。如果楼主的 git 装在了其他地方,也同理。楼主可以在 crontab 里 echo 一下$PATH 试试,也许这个 PATH 的默认值没有 git 的位置。 |
2
theRealWhexy 2020-07-13 07:43:25 +08:00
hhh 通常 crontab 最后一行不执行不是因为行末没回车吗…
crontab 最后一条命令要加个换行才可以 |
3
xurunfei OP @IgniteWhite
目前查到部分原因 1. a.txt 不是通过我的用户创建的,是我以前在 root 用户下创建的 2. 我的用户创建的定时任务没有运行(最重要) 3. @IgniteWhite 说的对,git 没有提交原因就是没有找到 git ,我通过 brew 安装的,但就问题二,我的用户不知为何 cron 没有执行 4. @theRealWhexy 我的 crontab 文件中留有最后一行为空行,所以这个问题不存在 |
4
amorphobia 2020-07-13 10:33:35 +08:00
当初我也想搞一个一段时间自动执行的脚本,网上搜了半天,最后用 launchd 实现了😂
|
5
0x4F5DA2 2020-07-13 19:38:35 +08:00
把 git 换成绝对路径试试
|
6
xurunfei OP @0x4F5DA2 我发现我的 mac 没有 cron 日志找不到,网上说 /var/spool/cron/tmp 这里有,但是我本地却没有你知道啥情况吗
|
7
xurunfei OP 继续跟进,发现还是文件夹权限问题,当我吧脚本放到 /Users/xxx/a.sh 中时,脚本正常执行,但是放到 Documents 里面就不执行,但是系统权限我已经给了,给 sh,终端,iterm 完全的磁盘访问权限
并且这个问题用 root 用户执行也是一样 |
8
xurunfei OP @amorphobia 问题解决,你可以参考下,macOS 磁盘访问控制方式不一样了,cron 无磁盘访问权限,解决方式: 系统偏好设置 > 安装性与隐私 > 完全磁盘访问权限 > 隐私 > 把 /usr/sbin/cron 拖进去就好
|