mac的crontab没有执行的原因

        crontab是一种定时任务调度工具,其用途就是根据表达式在特定的时间执行特定的任务。具体的时间可以用cron表达式表述,任务可以是sh脚本,也可以是shell命令。

一、cron表达式

        linux的cron表达式和Java中的格式有些区别,linux是分、时、日、月、周,而Java中的cron的表达式是秒、分、 时、日、月、周。推荐一个不错的cron表达式网站:crontab执行时间计算 - 在线工具

        linux cron表达式格式说明:

   
    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- 星期中星期几 (0 - 6) (星期天 为0) 
    |    |    |    +---------- 月份 (1 - 12)
    |    |    +--------------- 一个月中的第几天 (1 - 31)
    |    +-------------------- 小时 (0 - 23)
    +------------------------- 分 (0 - 59)

具体例子:0 */12 * * * 代表每隔12小时执行一次

二、crontab在mac中没有执行的原因 

        之前一直使用linux的crontab,后来在mac平台上需要用到crontab,第一次使用的时候发现crontab没有生效。于是研究了其没有执行的原因,综合网上的一些资料及自己的实践,归结下面原因:

1、cron表达式错误

        如果mac上的crontab没有生效,首先得检查下cron表达式是否有错。注意mac中的cron表达式和Java中的不同,Java是精确到秒的,所以有6个部分,而mac中的表达式和linux一样,只有5个部分。具体可以参考上述cron表达式说明部分。

2、验证crontab是否真的没有执行

        如果cron表达式确实没有问题,可以验证下crontab是否真的没有执行。可以在终端中执行下述命令:

sudo launchctl list | grep cron

        执行上述命令,我的机器中回显:280 0 com.vix.cron。该回显说明定时任务是开启的。

3、写个简单的任务验证

        如果crontab任务确实是开启的,可以写个简单的任务验证下。

  1. 开启任务编辑。在终端中输入 crontab -e。
  2. 在开启的任务中输入内容。如:* * * * /bin/date >>  /Users/admin/sh/test。作用是每隔1分钟将系统时间输出到/Users/admin/sh/目录下的test文件中,其中/Users/admin/sh/需要替换成自己的路径。
  3. 检查test文件。等1分钟后看看/Users/admin/sh/test文件是否有数据,如果有数据,则说明任务是能正常执行的,否则说明未正常执行。如果未正常执行,可以看下述第4部分。

4、添加环境变量

        如果第3部分能正常执行,但是crontab里的脚步还是没法执行,则需要检测脚本本身是否有问题。可以在终端中执行下述命令:

>> bash test.sh

        其中的test.sh是你自己的脚本文件。假如脚本文件能正常执行,说明脚本本身没问题,需要进一步排查是否环境变量引起的。因为手动执行脚本时,当前shell环境下程序能够找到环境变量,但是使用crontab时不一定能找到。因此需要在crontab文件中制定任务运行所需要的所有环境变量。

        打开你自己的脚本文件,假设脚本是/Users/admin/sh/test.sh,在头部加上下述内容:

#!/bin/bash
source /etc/profile

        保存自己的脚本,然后在终端中执行下述步骤:

1、首先在终端中输入:
>> crontab -e

2、在打开的crontab编辑器中输入
* * * * *  bash /Users/admin/sh/test.sh

        最后静静地等待任务的调度,成功的感觉真好o(^▽^)o。

三、总结

        本文主要讲解mac系统中crontab无法正常执行的一些可能原因。最开始简单介绍了下cron表达式,然后介绍排查crontab无法正常执行的可能原因及解决方法。当然限于本人认知有限,可能还有其他原因会导致crontab无法正常执行。本文记录了自己之前遇到的问题然后对应的解决思路,思路仅供参考。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值