添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Linux下的任务调度分为两类,系统任务调度和用户任务调度。

  • 系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。**/etc/crontab文件是系统任务调度的配置文件。**

  • 用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。 所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

    2、cron安装

    1
    2
    # cron的安装进程是cronie
    yum install -y cronie
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 设置cron开机启动
    systemctl enable crond.service

    # 关闭cron开机启动
    systemctl disable crond.service

    # 启动cron
    systemctl start crond.service

    # 查看cron运行状态
    systemctl status crond.service

    # 重启cron
    systemctl restart crond.service

    # 关闭cron
    systemctl stop crond.service

    3、cron相关文件

    我们先看一下在 /etc 目录下和cron相关的文件主要有哪些,接下来我们逐个对其进行分析。

    3.1 /etc/crontab

    我们cat一下 /etc/crontab 这个文件看看里面的内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 使用哪种she11接口
    SHELL=/bin/bash
    # 执行文件搜寻路径
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    # 若有额外STDOUT,以email将数据送给谁
    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
  • MAILTO=root: 这个项目是说,当 /etc/crontab 这个文件中的例行性工作的指令发生错误时,或者是该工作的执行结果有STDOUT/STDERR时,默认是由系统直接寄发一封mail给root。由于root 并无法在客户端中以POP3之类的协议接收邮件,因此你也可以改成自己的邮箱。
  • PATH: 这里就是输入执行文件的搜寻路径,一般使用默认的路径即可
  • 分-时-日-月-周-执行用户-执行指令: 七个字段的设定,这个 /etc/crontab 里面可以设定的基本语法就在这个文件里面,当我们忘了格式的时候可以cat这个文件看一下, 需要注意的是不填写的字段需要使用星号 * 来占位,同一个字段要写多个数字的时候用英文逗号隔开;执行用户方面,系统默认是以root的身份来进行的。
  • 这里需要注意的是,在设定时间的时候,不能同时使用周和日月,即我们只能设定该任务在周几执行或者是几月几日执行,不能同时满足这两个条件,否则系统可能会无法正确识别。

    3.2 /etc/cron.allow和/etc/cron.deny

    /etc/cron.allow /etc/cron.deny 这两个文件主要是对使用 cron 的用户进行管理。

    这里可以分为四种情况。

  • 如果这两个文件 都不存在 ,那么就只有 root 用户能够使用 crontab 命令
  • 如果 只存在 cron.allow ,那么就只有 cron.allow 上面的用户 使用 crontab 命令, 如果 root 用户也不在里面,则root用户也不能使用 crontab
  • 如果 只存在 cron.deny ,那么就只有 cron.deny 上面的用户 不能 使用 crontab 命令
  • 如果两个文件 都存在 ,则列在 cron.allow 文件中 而且没有 列在 cron.deny 中的用户可以使用 crontab 如果两个文件中都有同一个用户,以cron.allow文件里面是否有该用户为准, 如果 cron.allow 中有该用户,则可以使用 crontab 命令
  • crontab 命令我们将在本文后面讲解

    3.3 /etc/cron.d

    /etc/cron.d/ 这个目录用来存放任何要执行的 crontab 文件或脚本

    3.4./etc/cron.*ly/

    cron.monthly/ cron.weekly/ cron.daily/ cron.hourly/ 这四个目录下面存放的文件会在对应的时间内被执行,如 cron.hourly/ 里面的文件会在每个小时被执行一次, 需要注意的是,这里放置的是直接执行的脚本文件,而不是上述的crontab格式的定时任务描述文件。

    3.5 /var/spool/cron/

    /var/spool/cron/ 目录下存放着每个用户自己的 crontab 文件。

    4、crontab命令

    语法格式: crontab [参数]

    常用参数:

    编辑该用户的计时器设置 列出该用户的计时器设置 删除该用户的计时器设置 指定要设定计时器的用户名称 –help 显示帮助信息
    1
    2
    3
    4
    # 使用tinychen用户,每年的1月1日输出HappyNewYear!
    crontab -e -u tinychen
    # 然后和vim一样的编辑模式,输入下列参数
    0 0 1 1 * /bin/echo HappyNewYear! > /dev/pts/0

    需要注意的是,和 /etc/crontab 文件不同,使用 crontab 命令进入到编辑模式的时候不需要再加执行用户这一参数,默认是使用当前的登录账户,如果需要指定,使用 -u 参数即可。

    此外,crontab中还有几种简化的写法需要我们了解一下

    1
    2
    3
    4
    5
    6
    7
    *	代表所有的取值范围内的数字

    / 代表每的意思,如/5表示每5个单位

    - 代表从某个数字到某个数字

    , 分开几个离散的数字

    需要注意的是, crontab -r 是删除该用户的所有定时任务。

  • 个人化的行为使用 crontab-e

    如果你是依据个人需求来建立的例行工作排程,建议直接使用 crontab-e 。这样也能保障你的指令行为不会被大家看到( /etc/crontab 是大家都能读取的);

  • 系统维护管理使用 vim/etc/crontab

    如果这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入 /etc/crontab 较佳!

  • 自己开发软件使用 vim/etc/cron.d/newfile

    如果是想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于 /etc/cron.d/ 目录内即可。

  • 固定每小时、每日、每周、每天执行的特别工作:

    如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。如果想要偷懒,或者是一定要再某个周期内进行的任务,也可以放置到上面谈到的几个目录中,直接写入指令即可!

  •