• Linux的crontab


    如果要让unix系统重复,定期做一件事,我们就会用到crontab.

    实质上真正去执行每一个重复任务的是cron,cron是的unix家族的一个后台常驻程序,cron是由cron文件来驱动的,crontab只是用来管理cron文件的,比如给cron file里面添加任务,删除任务,文件里记录了要执行的任务,以及其"时间规则"

    crontab的作用,正如crontab的man文档中写的: maintain crontab files for individual users 

    crontab提供给我们的接口

    我们是不需要去直接编辑cron file,修改查看cron file都应该使用crontab

    查看当前用户的cron任务

      >>> crontab -l

    如下是我的cron文件,当然写的比较刻意,关于@hourly ,  @daily,参考下一节

    编辑当前用户的cron任务

      >>> crontab -e

    crontab会去查看EDITOR环境变量,用这个环境变量指定的编辑器来编辑现有的crontab任务,如果这个环境变量为空,就调用默认的/usr/bin/editor,在我的ubuntu机器上,默认的editor指向了/bin/nano,GNU nano也是GNU的一个编辑器,但是我用不太习惯,把它改成了vim.

      >>> export EDITOR="/usr/bin/vim"

    这样进去以后就是我熟悉的vim了.

    移除cron file

          >>> crontab -r 

    我们可以手动做一下,移除cron file后又装回去,安装使用命令

       >>> crontab file

    crontab为每一个用户维护自己的cron file,没有root权限的用户只能查看和修改自己的cron任务.

    如果有root权限,那么要查看用户wangyu的cron任务,使用 -u 参数:

          >>> crontab -u wangyu -l

    cron任务,编写cron表达式

    cron file中的每一行代表一个任务,也就是一个cron表达式.

    cron表达式语法:

    # * * * * *  command to execute
    # ┬ ┬ ┬ ┬ ┬
    # │ │ │ │ │
    # │ │ │ │ │
    # │ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday)
    # │ │ │ └────────── month (1 - 12)
    # │ │ └─────────────── day of month (1 - 31)
    # │ └──────────────────── hour (0 - 23)
    # └───────────────────────── min (0 - 59)

    前5个field指示时间,最后一个表示要用shell执行的command.

    举例:

    0  1  *  *  *  echo > /var/log/lq1990/error.log 

    就是一天中00:01   01 : 00的时候,清除error.log,而且是一个月的每一天,一年的每一个月,一周的每一天。

    假如我们有个python测试脚本/srv/test.py,想每两个小时执行一次,并且是整点,那么应该这么做

    0 */2 * * * /srv/test.py

    [例子]

    0 * * * *  代表什么?

    表示 每个小时的开始第0分钟都执行任务,对于这个时间,有一个预先定义的简写:@hourly. 也就是一个任务语句可以这么写

    @hourly  command 

    0 0 * * *   ?

    表示 每一天的00:00重复执行任务.对于这个时间定义也有预定义的简写:@daily.

    [思考]

    除了以上两个,还有三个预定义表示,分别是@weekly,@monthly,@yearly,其对应的表示是什么? 

    和crontab/cron有关的配置文件

    对于每个系统用户,如果你指定了相应的cron语句,都会在/var/spool/cron/crontabs/下有一个自己的文件,里面就是你的 cron语句,比如对于用户wangyu,就会有这么一个文件 

    /var/spool/cron/crontabs/wangyu

    我们是不要去直接查看和修改这个文件的,使用crontab.

    cron.deny和cron.allow.

    两个文件都在/etc/下,默认情况下这两个文件都是没有的.

    cron.deny指定了不允许使用crontab的用户,比如我在/etc/下创建cron.deny,并且加上一行wangyu,我的用户名,那当我再使用crontab的时候,出现如下提示:

    但当我创建/etc/cron.allow,并且把我的用户名放进去以后,我又可以使用crontab了

    当然把系统的用户放进/etc/cron.deny以后,用户只是不能使用crontab了,之前这个用户添加的cron任务还是会一直执行的,可能因为cron和crontab是分开的,cron是不管哪个系统用户设置的任务的.

    更复杂一点的cron表达式

    正如下面@斯诺登同学所提到的,写这篇文章的时候是11月,如果我们要在12月,每天7-24点,每间隔10分钟执行一个任务应该怎么做?

    */10  7-23  *  12  *   command

    这里我们使用了一些特殊字符

    "-" 表示取值区间,    * 表示该filed的所有值, 而 "/" 表示步长, 所以 */10 就表示 0-59 ,且从0开始每增加10重复做一次.

    [思考]

    上面是规定了12月做这件事, 我还没有想到,如果要求从下个月1号开始,按照某个规律重复一件事,应该怎么做,可以做到没?

    ------------

    参考:

    http://en.wikipedia.org/wiki/Cron

    cron 的 man page.

  • 相关阅读:
    Python_turtle绘图实例(持续更新)
    C++程序设计实验考试准备资料(2019级秋学期)
    利用next_permutation()实现全排列 完成 阮小二买彩票
    用埃氏算法来素数求和
    C++指针注意事项
    double与float的输入输出格式
    图片文件隐写术
    文件操作与隐写
    MFC 消息机制
    MFC应用中处理消息 创建窗口和会话框的顺序
  • 原文地址:https://www.cnblogs.com/livingintruth/p/3437279.html
Copyright © 2020-2023  润新知