zoukankan      html  css  js  c++  java
  • 例行性工作排程(crontab)

    例行性工作排程(crontab)

    仅执行一次的工作排程

    atd启动

    [root@study ~]# systemctl restart atd # 重新启动 atd 这个服务
    [root@study ~]# systemctl enable atd # 让这个服务开机就自动启动
    [root@study ~]# systemctl status atd # 查阅一下 atd 目前的状态
    

    at 的运作方式

    1. 先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);
    2. 如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
    3. 如果两个文件都不存在,那么只有 root 可以使用 at 这个指令。

    at 单一工作排程的进行

    • at [-mldv] TIME
    • at -c 工作号码
    • 选项与参数:
      • -m :当 at 的工作完成后,即使没有输出讯息,亦以 email 通知使用者该工作已完成。
      • -l :at -l 相当于 atq,列出目前系统上面的所有该用户的 at 排程;
      • -d :at -d 相当于 atrm ,可以取消一个在 at 排程中的工作;
      • -v :可以使用较明显的时间格式栏出 at 排程中的任务栏表;
      • -c :可以列出后面接的该项工作的实际指令内容。
    • TIME:时间格式,这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
      • HH:MM ex> 04:00
        在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
      • HH:MM YYYY-MM-DD ex> 04:00 2015-07-30
        强制规定在某年某月的某一天的特殊时刻进行该工作!
      • HH:MM[am|pm] [Month] [Date] ex> 04pm July 30
        也是一样,强制在某年某月某日的某时刻进行!
      • HH:MM[am|pm] + number [minutes|hours|days|weeks]
        ex> now + 5 minutes ex> 04pm + 3 days
        就是说,在某个时间点『再加几个时间后』才进行。

    at 工作的管理

    • atq:查询目前主机上面有多少的 at 工作排程。
    • atrm 工作号码:移除工作排程。

    循环执行的例行性工作排程

      循环执行的例行性工作排程则是由 cron (crond) 这个系统服务来控制的。当用户使用 crontab 这个指令来建立工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以账号来作为判别的。不要使用 vi 直接编辑该文件, 因为可能由于输入语法错误,会导致无法执行 cron。

    • crontab [-u username] [-l|-e|-r]
    • 选项与参数:
      • -u :只有 root 才能进行这个任务,亦即帮其他使用者建立/移除 crontab 工作排程;
      • -e :编辑 crontab 的工作内容
      • -l :查阅 crontab 的工作内容
      • -r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。

    在这里插入图片描述
    在这里插入图片描述

    系统的配置文件: /etc/crontab, /etc/cron.d/*

    • 个人化的行为使用『 crontab -e 』:如果你是依据个人需求来建立的例行工作排程,建议直接使用 crontab -e来建立你的工作排程较佳! 这样也能保障你的指令行为不会被大家看到 (/etc/crontab 是大家都能读取的权
      限喔!);
    • 系统维护管理使用『 vim /etc/crontab 』:如果你这个例行工作排程是系统的重要工作,为了让自己管理方便,同时容易追踪,建议直接写入 /etc/crontab 较佳!
    • 自己开发软件使用『 vim /etc/cron.d/newfile 』:如果你是想要自己开发软件,那当然最好就是使用全新的配置文件,并且放置于 /etc/cron.d/ 目录内即可。
    • 固定每小时、每日、每周、每天执行的特别工作:如果与系统维护有关,还是建议放置到 /etc/crontab 中来集中管理较好。 如果想要偷懒,或者是一定要再某个周期内进行的任务,也可以放置到上面谈到的几个目录中,直接写入指令即可!

    可唤醒停机期间的工作任务

    • anacron [-sfn] [job]..
    • anacron -u [job]..
    • 选项与参数:
      • -s :开始一连续的执行各项工作 (job),会依据时间记录文件的数据判断是否进行;
      • -f :强制进行,而不去判断时间记录文件的时间戳;
      • -n :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
      • -u :仅更新时间记录文件的时间戳,不进行任何工作。
      • job :由 /etc/anacrontab 定义的各项工作名称。

    anacron 的执行流程应该是这样的 (以 cron.daily 为例):

    1. 由 /etc/anacrontab 分析到 cron.daily 这项工作名称的天数为 1 天;
    2. 由 /var/spool/anacron/cron.daily 取出最近一次执行 anacron 的时间戳;
    3. 由上个步骤与目前的时间比较,若差异天数为 1 天以上 (含 1 天),就准备进行指令;
    4. 若准备进行指令,根据 /etc/anacrontab 的设定,将延迟 5 分钟 + 3 小时 (看 START_HOURS_RANGE 的
      设定);
    5. 延迟时间过后,开始执行后续指令,亦即『 run-parts /etc/cron.daily 』这串指令;
    6. 执行完毕后, anacron 程序结束。

    crond 与anacron 的关系:

    1. crond 会主动去读取 /etc/crontab, /var/spool/cron/, /etc/cron.d/ 等配置文件,并依据『分、时、日、月、周』的时间设定去各项工作排程;
    2. 根据 /etc/cron.d/0hourly 的设定,主动去 /etc/cron.hourly/ 目录下,执行所有在该目录下的执行文件;
    3. 因为 /etc/cron.hourly/0anacron 这个脚本文件的缘故,主动的每小时执行 anacron ,并呼叫 /etc/anacrontab的配置文件;
    4. 根据 /etc/anacrontab 的设定,依据每天、每周、每月去分析 /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/内的执行文件,以进行固定周期需要执行的指令。

    重点回顾

    • 系统可以透过 at 这个指令来排程单一工作的任务!『at TIME』为指令下达的方法,当 at 进入排程后, 系统执行该排程工作时,会到下达时的目录进行任务;
    • at 的执行必须要有 atd 服务的支持,且 /etc/at.deny 为控制是否能够执行的使用者账号;
    • 透过 atq, atrm 可以查询与删除 at 的工作排程;
    • batch 与 at 相同,不过 batch 可在 CPU 工作负载小于 0.8 时才进行后续的工作排程;
    • 系统的循环例行性工作排程使用 crond 这个服务,同时利用 crontab -e 及 /etc/crontab 进行排程的安排;
    • crontab -e 设定项目分为六栏,『分、时、日、月、周、指令』为其设定依据;
    • /etc/crontab 设定分为七栏,『分、时、日、月、周、执行者、指令』为其设定依据;
    • anacron 配合 /etc/anacrontab 的设定,可以唤醒停机期间系统未进行的 crontab 任务!
  • 相关阅读:
    cocos2d-x关于CCTableView的“乱序问题”的理解
    线段树
    goldengate 简单配置 oracle to oralce
    iphone缩小uIImage图片
    基本排序算法小结
    Qt4创建工程的几种方法:linux系统
    velocity中的velocityCounter不起作用的原因
    autotools入门笔记(一)
    cp命令的实现
    AutoCompleteTextView输入汉字拼音首字母实现过滤提示(支持多音字)
  • 原文地址:https://www.cnblogs.com/chengmf/p/12653147.html
Copyright © 2011-2022 走看看