• Linux学习21-设置定时任务crontab


    前言

    做自动化测试写的脚本需设置定时任务,在指定的时间去执行,这就需要用到定时任务。之前用jenkins可以在里面设置定时任务,很好用,其实不用jenkins,在linux上也可以用crontab做个定时任务。
    本篇学下crontab定时任务的语法,制作一个简单的python脚本文件,使用crontab定时执行

    crontab语法

    crontab一般在目录/etc/crontab,可以用cat命令查看到里面的内容

    [root@yoyo etc]# cat /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
    
    

    crontab定时任务命令规则:

    星期 命令 路径
    minute hour day month week command path
    * * * * * command path
    • minute: 表示分钟,可以是从0到59之间的任何整数。
    • hour:表示小时,可以是从0到23之间的任何整数。
    • day:表示日期,可以是从1到31之间的任何整数。
    • month:表示月份,可以是从1到12之间的任何整数。
    • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
    • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
    • path:需执行的文件,用绝对路径

    crontab命令常用的特殊字符

    符号 说明
    * 表示任何时刻
    , 表示分割
    - 表示一个段,如第二段里: 1-5,就表示1到5点
    /n 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1

    编辑crontab文件

    各个参数说明:

    参数 说明
    -e 执行文字编辑器来设定时程表,内定的文字编辑器是 vi(可以指定别的用户,但是必须拥有权限)
    -r 删除目前的时程表
    -l 列出目前的时程表
    -v 列出用户cron作业的状态

    使用crontab -e去编辑一个定时任务,默认进入vi编辑器,按i进入编辑模式,编辑如下内容

     */1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log
    

    实现的功能:每分钟执行一次 echo 'hello world ! ~yoyo!' ,输出的内容保存到~/yoyo.log目录

    编辑完成后,按esc键 :wq保存退出,使用crontab -l查看当前任务状态

    [root@yoyo /]# crontab -e
    crontab: installing new crontab
    [root@yoyo /]# crontab -l
    */1 * * * * /bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log
    

    等一分钟后,cd到~目录,使用tail查看输出的内容

    [root@yoyo /]# cd ~
    [root@yoyo ~]# ll
    total 28
    drwxr-xr-x 2 root    root     4096 Jun 29 17:55 conf
    drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
    drwxr-xr-x 2 root    root     4096 Jun 29 17:55 logs
    drwxr-xr-x 5 root    root     4096 Jun 29 17:39 mysql
    -rw------- 1 root    root      433 May 17 08:34 nohup.out
    drwxr-xr-x 4 root    root     4096 Jun 30 17:16 yoyo
    -rw-r--r-- 1 root    root       63 Jul 10 23:12 yoyo.log
    [root@yoyo ~]# tail yoyo.log
    hello world ! ~yoyo!
    hello world ! ~yoyo!
    hello world ! ~yoyo!
    [root@yoyo ~]# 
    

    查看crontab执行的历史

    我们如何知道crontab是否执行了定时任何呢?可以在 /var/log目录查看运行的日志记录,使用tail 查看

    tail -10 /var/log/cron

    [root@yoyo log]# cd /var/log
    [root@yoyo log]# tail -10 cron
    Jul 10 23:10:50 yoyo crontab[8045]: PAM pam_end: NULL pam handle passed
    Jul 10 23:10:54 yoyo crontab[8106]: (root) LIST (root)
    Jul 10 23:10:54 yoyo crontab[8106]: PAM pam_end: NULL pam handle passed
    Jul 10 23:11:01 yoyo crond[541]: (root) RELOAD (/var/spool/cron/root)
    Jul 10 23:11:01 yoyo CROND[8125]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    Jul 10 23:12:01 yoyo CROND[8232]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    Jul 10 23:13:01 yoyo CROND[8340]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    Jul 10 23:14:01 yoyo CROND[8446]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    Jul 10 23:15:01 yoyo CROND[8553]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    Jul 10 23:16:01 yoyo CROND[8662]: (root) CMD (/bin/echo 'hello world ! ~yoyo!' >> ~/yoyo.log)
    [root@yoyo log]# 
    
    

    常用的定时任务

    任务名称 指令
    每1分钟执行一次command */1 * * * * command
    每小时的第15,20,30分钟执行 15,20,30 * * * * command
    每天早上9点和晚上17点上下班执行 * 9,17 * * * command
    每天早上8点30和晚上20点30执行 30 8,20 * * * command
    每隔两天的上午8点到11点的第3和第15分钟执行 3,15 8-11 */2 * * command
    每个星期一的上午8点到11点的第3和第15分钟执行 3,15 8-11 * * 1 command
    每月1、10、22日的4 : 45执行 45 4 1,10,22 * * command
    每周1,3,5 晚上八点执行 * 20 * * 1,3,5 command
    每周1,2, 3 4, 5 早点9点20打卡 20 9 * * 1,2,3,4,5 command
    每个月的20号都来那么一次 * * 20 * * command
    每年的情人节执行一次 * * 14 2 * command
    每2个小时执行一次 * */2 * * * command

    执行python脚本

    接下来用python写个hello world,去执行下吧

    [root@yoyo log]# cd ~
    [root@yoyo ~]# vi hello.py
    # 编辑 print("hello")
    [root@yoyo ~]# python hello.py 
    hello
    [root@yoyo ~]# crontab -e
    crontab: installing new crontab
    [root@yoyo ~]# crontab -l
    */1 * * * * /bin/python ~/hello.py >> ~/hello.log
    [root@yoyo ~]# ll
    total 36
    drwxr-xr-x 2 root    root     4096 Jun 29 17:55 conf
    drwxr-xr-x 4 polkitd ssh_keys 4096 Jun 29 17:55 data
    -rw-r--r-- 1 root    root        6 Jul 10 23:36 hello.log
    -rw-r--r-- 1 root    root       16 Jul 10 23:34 hello.py
    drwxr-xr-x 2 root    root     4096 Jun 29 17:55 logs
    drwxr-xr-x 5 root    root     4096 Jun 29 17:39 mysql
    -rw------- 1 root    root      433 May 17 08:34 nohup.out
    drwxr-xr-x 4 root    root     4096 Jun 30 17:16 yoyo
    -rw-r--r-- 1 root    root      546 Jul 10 23:35 yoyo.log
    [root@yoyo ~]# tail hello.log 
    hello
    hello
    
  • 相关阅读:
    jQuery的标签选择器$('p')、类选择器$('.myClass')、id选择器$('#myId')
    jQuery Validate验证框架与 jQuery ajaxSubmit的联合使用
    23种设计模式(一) 单例模式
    java 常见的几种运行时异常RuntimeException
    Servlet 生命周期、工作原理
    throw与throws的区别
    Apache Shiro java安全框架
    web.xml 中<context-param>与<init-param>的区别与作用
    web.xml 中CharacterEncodingFilter类的学习
    web.xml中的contextConfigLocation在spring中的作用
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/11167181.html
Copyright © 2020-2023  润新知