V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xurunfei
V2EX  ›  macOS

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

  •  2
     
  •   xurunfei · 2020-07-12 21:45:19 +08:00 · 3262 次点击
    这是一个创建于 1356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    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 文件夹

    谢谢大佬

    8 条回复    2020-07-18 11:18:22 +08:00
    IgniteWhite
        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 的位置。
    theRealWhexy
        2
    theRealWhexy  
       2020-07-13 07:43:25 +08:00
    hhh 通常 crontab 最后一行不执行不是因为行末没回车吗…
    crontab 最后一条命令要加个换行才可以
    xurunfei
        3
    xurunfei  
    OP
       2020-07-13 10:10:11 +08:00
    @IgniteWhite
    目前查到部分原因
    1. a.txt 不是通过我的用户创建的,是我以前在 root 用户下创建的
    2. 我的用户创建的定时任务没有运行(最重要)
    3. @IgniteWhite 说的对,git 没有提交原因就是没有找到 git ,我通过 brew 安装的,但就问题二,我的用户不知为何 cron 没有执行
    4. @theRealWhexy 我的 crontab 文件中留有最后一行为空行,所以这个问题不存在
    amorphobia
        4
    amorphobia  
       2020-07-13 10:33:35 +08:00
    当初我也想搞一个一段时间自动执行的脚本,网上搜了半天,最后用 launchd 实现了😂
    0x4F5DA2
        5
    0x4F5DA2  
       2020-07-13 19:38:35 +08:00
    把 git 换成绝对路径试试
    xurunfei
        6
    xurunfei  
    OP
       2020-07-14 09:15:04 +08:00
    @0x4F5DA2 我发现我的 mac 没有 cron 日志找不到,网上说 /var/spool/cron/tmp 这里有,但是我本地却没有你知道啥情况吗
    xurunfei
        7
    xurunfei  
    OP
       2020-07-16 10:05:21 +08:00
    继续跟进,发现还是文件夹权限问题,当我吧脚本放到 /Users/xxx/a.sh 中时,脚本正常执行,但是放到 Documents 里面就不执行,但是系统权限我已经给了,给 sh,终端,iterm 完全的磁盘访问权限
    并且这个问题用 root 用户执行也是一样
    xurunfei
        8
    xurunfei  
    OP
       2020-07-18 11:18:22 +08:00
    @amorphobia 问题解决,你可以参考下,macOS 磁盘访问控制方式不一样了,cron 无磁盘访问权限,解决方式: 系统偏好设置 > 安装性与隐私 > 完全磁盘访问权限 > 隐私 > 把 /usr/sbin/cron 拖进去就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2847 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:30 · PVG 22:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.