• Linux Crontab 定时任务使用示例


    目录

    语法

    crontab 时间表达式

    执行目录下的所有脚本

    执行指定脚本

    执行日志

    邮件通知

    限制某些用户使用crond

    定时任务管理

    启动

    停止

    重启

    查看状态

    简单示例

    新建测试脚本

    编辑定时任务crontab

    脚本授权

    启动定时任务


    最近工作中有这么一个场景:定时将日志文件入库(MySQL),我使用到了Linux自带的Crontab定时任务和MySQL的LOAD DATA,这篇记录一下Crontab的简单使用示例,下一篇记录一下使用Crontab定时入库数据,敬请期待。

    如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。

    语法

    我们看下 /etc/crontab 的内容,如下:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root

    # For details see man 4 crontabs

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed

    如上,最后一行就是语法

    *  *  *  *  * user-name  command to be executed

    前五个*:配置定时任务执行的时间。

    user-name:以什么身份任务。

    command to be executed:要执行的脚本。

    这里补充另一个参数:run-parts

    run-parts:执行指定目录下的脚本。

    crontab 时间表达式

    先看下系统 /etc/crontab 文件内容,如下:

     *  *  *  *  * user-name  command to be executed
    项目含义范围
    第一个"*"一小时当中的第几分钟(minute)0~59
    第二个"*"一天当中的第几小时(hour)0~23
    第三个"*"一个月当中的第几天(day)1~31
    第四个"*"一年当中的第几个月(month)1~12
    第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)

    在时间表示中,还有一些特殊符号需要知道,如下:

    特殊符号含义
    *(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
    ,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
    -(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
    /(正斜线)代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

    简单示例:

    表达式含义
    45 22 ***在每天22 点 45 分执行
    */10 4 ***每天的凌晨 4 点,每隔 10 分钟执行一次
    0 5 1,15**在每月 1 日和 15 日的凌晨 5 点 0 分执行
    0 17 ** 1在每周一的 17 点 0 分执行
    40 4 ** 1-5在每周一到周五的凌晨 4 点 40 分执行

    注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆。

    执行目录下的所有脚本

    run-parts 指定目录下的脚本都会执行。

    示例:

    * * * * * root run-parts /home/cron

    /home/cron 目录下所有脚本都会每分钟执行一次。

    执行指定脚本

    不使用 run-parts 时,可以直接指定要执行的脚本。

    示例:

    * * * * * root /home/cron/test.sh

    /home/cron 目录下虽然有多个脚本,但是只会执行 test.sh 脚本。

    执行日志

    定时任务的执行日志保存在 /var/log/cron 文件中,可以查看日志检查定时任务的执行过程中有没有报错:

    tail -f /var/log/cron

    邮件通知

    /var/spool/mail 目录下存放发送给每个用户的消息,这里面相对log中记录的更为详细,如果脚本运行有错误,也会记录,脚本中的测试输出语句,也会进行记录。

    比如你有一个用户yjh,则在此目录下会生成一个yjh的邮件通知文件,文件名就是用户名,我这里用的root执行的,查看日志指令如下:

    tail -f /var/spool/mail/root

    下面这是我实际使用时的部分日志: 

    限制某些用户使用crond

    通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。

    • 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。

    • 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。

    定时任务管理

    启动

    systemctl start crond.service

    停止

    systemctl stop crond.service

    重启

    systemctl restart crond.service

    查看状态

    systemctl status crond.service

    简单示例

    每分钟都执行一次/home/cron目录中的test.sh脚本,向/home/cron/test.log 文件写入hello,脚本执行者是root用户

    新建测试脚本

    vim /home/cron/test.sh

    内容如下:

    1. #/bin/bash
    2. echo "hello" >> /home/cron/test.log

    编辑定时任务crontab

    vim  /etc/crontab

    内容如下:

    1. # 每分钟执行一次
    2. * * * * * root run-parts /home/cron

    脚本授权

    chmod 755 test.sh

    启动定时任务

    systemctl start crond.service

    几分钟后我们发现 /home/cron 目录下多了一个 test.log 文件,查看下test.log文件内容如下:

     

    至此结束!!! 

  • 相关阅读:
    kubernetes 安装与部署
    Hadoop(HDFS)
    Opencv图像基本操作——读取、显示、截取图像、属性、颜色通道、边界填充、图像融合
    MATLAB画图由于线段太多导致导出图片模糊的解决办法
    HX711数据是否异或问题
    现代物流有哪些特点?
    fallback与fallbackFactory
    Python八连冠!它的资本到底是什么?带你详解Python的牛逼之处
    使用jQuery实现简易商城系统
    低代码到底是什么?
  • 原文地址:https://blog.csdn.net/H900302/article/details/127088865