• 计划任务服务


    计划任务分为一次性计划任务(at命令)与长期性计划任务(crontab命令):

    1. 一次性计划任务:任务执行一次后就不存在;
    2. 长期性计划任务:每隔一定的周期需要执行的任务。

       

    • 一次性计划任务
      1. 一次性计划任务只执行一次,一般用于满足临时的工作需求,可使用at命令实现该功能。
      2. 执行at命令时,必须要有atd(单一的例行性工作调度)服务的支持(d:deamon守护进程 <http://blog.csdn.net/woxiaohahaa/article/details/53487602> )。

      3. 当使用at命令来生成所要运行的一次性计划任务时,会将该工作以文本文件的方式写入/var/spool/at/目录内,等待atd服务的取用与执行。

      4. 由于安全问题,并非所有用户都可以进行at工作调度。系统会利用/etc/at.allow与/etc/at.deny这两个文件来进行at的使用限制:

      5. 使用at命令时会进入at shell的环境来让用户下达工作命令。因此最好使用绝对路径来执行相关命令(at在运行时,会切换到下达at指令的那个工作目录。如在/tmp中执行"at now",然后输入"mail root -s "test"<.bashrc",该bash.rc文件将会是/tmp/.bashrc)。
      6. 由于在at工作调度的使用上,系统会将该项at工作独立出用户的bash环境,直接交给系统的atd程序来接管,因此,当执行了at的工作之后就可以立刻脱机,余下的工作交由Linux管理即可(也就是使用at命令后(at工作后台执行),用户可脱机继续工作)。
      7. at(executes command at a specified time):在指定的时间执行命令。格式:at [选项] [参数]。

        选项

        作用

        -m

        任务执行完成后,即使没有输出信息,仍以邮件email通知用户(若在at shell内的命令没有任何的信息输出,那么at默认不会发Email给执行者)

        -l

        列出当前系统上该用户的at调度任务列表(相当于atq命令)

        -d

        删除存在于at调度任务列表中的指定工作(相当于atrm命令)

        -v

        使用较明显的时间格式列出at调度中的任务列表

        -c

        列出指定工作的实际命令内容

        at命令的执行与终端机环境无关。而所有的标准输出/错误输出都会传送到执行者的mailbox邮箱中,所以直接执行"echo Hello!"并不会显示在终端机上。

        若需要将信息显示在终端机屏幕上,可通过who命令查看终端机的设备,再交由输出重定向处理。

        at -l或atq查看该用户目前的at工作调度:

        at -c 工作号码可显示该项at工作的详细信息(显示结果与cat /var/spool/at/目录内的工作文本文件相同):

        at -d 工作号码或atrm 工作号码删除指定工作项:

      8. batch(分批处理):在指定的时间,当系统不繁忙(CPU工作负载小于0.8(可以使用uptime命令查看系统的负载情况))时执行命令。用法与at类似。

       

    • 长期性计划任务
      1. 循环执行的例行性工作由cron(crond)服务来控制(默认启动的),可使用crontab命令实现循环型工作调度。
      2. 为了安全性的问题,与at类似的,会进行用户使用限制:

      3. 当用户使用crontab命令来新建循环线工作调度之后,该项工作就会被记录到/var/spool/cron/目录中,而且是以账号来作为判别的,但不要使用Vim直接编辑该文件,因为可能会由于输入语法的错误,导致无法执行cron:

        另外,cron执行的每一项工作都会被记录到/var/log/cron这个日志文件中,可藉由检查此日志文件来检查是否有"非正常用户设定的cron被执行了",防止系统被植入木马:

      4. crontab表达式的六个字段:

        ("周"的数字为07时,都代表"星期天"的意思)

        • 注意事项:

          • 为避免邮箱不断收到例行性任务的输出讯息(如DNS检测系统中,若DNS长层主机挂掉,那么会一直发送错误信息邮件),此时可利用数据流重定向把结果输出到/dev/null中(> /dev/null 2>&1);
          • 如果大量crontab周期任务都在同一时间执行,那么在某个时段,系统将相当繁忙,会造成“系统资源分配不均”的问题:
          • 参考: <https://segmentfault.com/q/1010000010790162/a-1020000010790309

      5. crontab(计划任务):提交和管理用户的周期性执行的任务。格式:crontab [选项] [参数]。

        选项

        作用

        -u

        (管理员身份)创建、编辑其他用户的周期性计划任务

        -e

        创建、编辑该用户的周期性计划任务

        -l

        查看该用户当前的周期性计划任务

        -r

        删除该用户当前所有的周期性计划任务(若仅要删除一项,可用-e去编辑)

           

        crontab -e新建该用户的周期性计划任务:

        注意事项:

        1. 如果在crond服务中需要同时包含多条计划任务的命令语句,应每行仅写一条;
        2. 因每个用户都只有一个位于/var/spool/cron/目录中的文件来记录crontab工作调度,所以命令一定要用绝对路径的方式来编写(可使用whereis命令查询路径)。

        crontab -l查看周期性计划任务:

        crontab -r删除周期性计划任务文件(全部的计划工作都会被删除,若仅想删除某一项工作,则需要使用crontab -e去编辑计划任务)

        crontab -u 用户名 [-ler]管理员帮助其他用户查看、创建编辑或删除周期性计划任务:

      6. 系统的例行性任务配置文件:/etc/crontab。cron会每分钟去读取一次/etc/crontab与/var/spool/cron/中的数据内容。若要修改或增加系统的例行性命令,可以root身份直接编辑/etc/crontab文件并保存,cron的设定会自动执行(但会由于crontab是读到内存当中的,所以在修改完/etc/crontab之后,可能不会立刻执行,需重新启动cron服务"systemctl restart crond")。

        • 注意事项:

          • 为避免邮箱不断收到例行性任务的输出讯息(如DNS检测系统中,若DNS长层主机挂掉,那么会一直发送错误信息邮件),此时可利用数据流重定向把结果输出到/dev/null中(> /dev/null 2>&1);
          • 如果大量crontab周期任务都在同一时间执行,那么在某个时段,系统将相当繁忙,会造成"系统资源分配不均"的问题:

      7. 一般来说,cron服务预设有三个地方会有执行脚本配置文件:/etc/crontab、/etc/cron.d/*、/var/spool/cron/*。其中跟系统的运行相关的配置文件是存放在/etc/crontab文件内以及/etc/cron.d/目录内的文件;跟用户自设工作相关的配置文件则放在/var/spool/cron/中的文件群:

        run-parts是一个shell script/脚本(可使用"which run-parts"查看路径),会将寻找其后接目录内的所有可执行文件,并在大约5分钟内执行指令任务(而不是分、时、日、月、周的设定值)

        而/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/,分别代表每日、每周、每月各执行一次的意思,它们与anacron有关:

      8. 个人化的行为建议使用"crontab -e",根据个人需求来建立例行性计划任务(保存在/var/spool/cron/目录中),因为/etc/crontab文件是可以被所有用户读取的:

      9. 系统维护管理建议使用"vim /etc/crontab"来创建例行工作排程,直接写入/etc/crontab管理方便易追踪。
      10. 自行开发的软件建议使用"vim /etc/cron.d/newfile"来创建全新的配置文件。
      11. 固定每小时、每日、每周、每天执行的特别工作,也可以放置到/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/中。
      12. 对于非24小时启动的LInux系统的crontab执行,以及因为某些原因导致的超过时间而没有被执行的排程工作,须依靠anacron命令的功能。anacron预设会以一天、七天、一个月为期去侦测系统未进行的crontab任务。
      13. anacron会通过读取时间记录文件(timestamps),来获知系统的关机时间,然后去分析当前时间与时间记录文件所记载的上次执行anacron的时间,两者比较后若发现有差异,则代表在某些时刻没有进行crontab,此时anacron就会开始执行未进行的crontab任务。
      14. anacron是一支程序而并非一个服务,它在CentOS中已经属于crontab的调度,同时anacron会每个小时被主动执行一次,其配置文件为/etc/cron.hourly/0anacron(为了防止anacron误判时间参数,/etc/cron.hourly/中的anacron会在文件名前加"0"(0anacron),表示让anacron优先进行,更新时间戳)

      15. anacron(anachronistically过时地)的语法:

      16. anacron的配置文件:/etc/anacrontab

        天数:anacron分析当下与时间戳(/var/spool/anacron/内的时间记录文件)相关的天数,若超过此天数,就准备开始执行指令,若没有超过此天数,则不予执行后续的指令;

        延迟时间:如果已确定超过天数而导致要执行排程工作,那么将延迟多久后开始执行,因为若立即启动该项工作可能会产生资源冲突的问题;

        工作名称定义:记录在/var/log/cron中该项任务的名称,通常与后续的目录资源名称相同即可;

        指令串:通过run-parts来处理(与/etc/cron.d/0hourly类似)。

      17. anacron的执行流程:

        如此一来,放置在/etc/cron.daily/内的任务会在一天后被执行。由于anacron是每个小时被执行一次,因此,开机过后约1小时左右系统会有一小段忙碌的时间,硬盘使用率会比较高,anacron会执行过去/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/中的未进行的各项工作排程。

      18. crond与anacron的关系:
        1. cron会主动去读取/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/内的执行文件,以进行固定周期需要执行的指令。

  • 相关阅读:
    javascript获得浏览器工作区域的大小
    javascript禁止输入数字
    Extjs之遍历Store内的数据
    Extjs之rowEditing编辑状态时列不对齐
    Extjs中numberfield小数位数设置
    【转】vscode常用快捷键整理
    【转】如何提高WEB的性能?
    【转】echarts 使用示例
    uni-app页面配置和跳转
    【转】.NetCore如何将特性和依赖注入有效结合
  • 原文地址:https://www.cnblogs.com/dayoyan/p/8653962.html
Copyright © 2020-2023  润新知