mac crontab 不执行,大佬帮忙瞧瞧啥问题

2020-07-12 21:45:19 +08:00
 xurunfei

背景

  1. 系统 mac10.15.4
  2. 希望每天自动提交自己的笔记,写个定时任务提交

内容

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
  1. 脚本单独测试没问题
  2. cron 第二条是后来加入的,编辑 /etc/crontab 后执行了 crontab /etc/crontab 并且 crontab -l 有显示
  3. a.txt 为 root 权限,而不是当前用户权限(怀疑是这个问题,但是无从下手),当我用自己的账号先生成 a.txt 时,cron 执行失败

附带问题

crontab log 找不到,网上查到说是在 /var/spool/cron/tmp 中,但是我没有查到 spool 中有 cron 文件夹

谢谢大佬

3487 次点击
所在节点    macOS
8 条回复
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 的位置。
theRealWhexy
2020-07-13 07:43:25 +08:00
hhh 通常 crontab 最后一行不执行不是因为行末没回车吗…
crontab 最后一条命令要加个换行才可以
xurunfei
2020-07-13 10:10:11 +08:00
@IgniteWhite
目前查到部分原因
1. a.txt 不是通过我的用户创建的,是我以前在 root 用户下创建的
2. 我的用户创建的定时任务没有运行(最重要)
3. @IgniteWhite 说的对,git 没有提交原因就是没有找到 git ,我通过 brew 安装的,但就问题二,我的用户不知为何 cron 没有执行
4. @theRealWhexy 我的 crontab 文件中留有最后一行为空行,所以这个问题不存在
amorphobia
2020-07-13 10:33:35 +08:00
当初我也想搞一个一段时间自动执行的脚本,网上搜了半天,最后用 launchd 实现了😂
0x4F5DA2
2020-07-13 19:38:35 +08:00
把 git 换成绝对路径试试
xurunfei
2020-07-14 09:15:04 +08:00
@0x4F5DA2 我发现我的 mac 没有 cron 日志找不到,网上说 /var/spool/cron/tmp 这里有,但是我本地却没有你知道啥情况吗
xurunfei
2020-07-16 10:05:21 +08:00
继续跟进,发现还是文件夹权限问题,当我吧脚本放到 /Users/xxx/a.sh 中时,脚本正常执行,但是放到 Documents 里面就不执行,但是系统权限我已经给了,给 sh,终端,iterm 完全的磁盘访问权限
并且这个问题用 root 用户执行也是一样
xurunfei
2020-07-18 11:18:22 +08:00
@amorphobia 问题解决,你可以参考下,macOS 磁盘访问控制方式不一样了,cron 无磁盘访问权限,解决方式: 系统偏好设置 > 安装性与隐私 > 完全磁盘访问权限 > 隐私 > 把 /usr/sbin/cron 拖进去就好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX