计划任务服务

计划任务分为一次性计划任务(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/内的执行文件,以进行固定周期需要执行的指令。

转载于:https://www.cnblogs.com/dayoyan/p/8653962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值