zoukankan      html  css  js  c++  java
  • Linux20:工作排程

    工作排程

    单一工作排程at

    atd服务

    使用单一工作排程时必须先开启atd服务。

    查看atd服务目前的状态:systemctl status atd

    重新启动atd服务:systemctl restart atd

    设置atd服务开机启动:systemctl enable atd

    执行at的过程

    当执行at指令时,会把工作以文本文件的形式写入/var/spool/at/目录下,该工作就会被atd服务调用并执行。

    一般来说要对at的使用进行限制,因为黑客经常使用工作排程收集信息,为了限制at的使用,可以增加/etc/at.allow和/etc/at.deny两个文件,在执行at时会先找到/etc/at.allow文件,写在该文件中的使用者才能使用at,不在该文件中就不能使用at。如果/etc/at.allow文件不存在,则会查找/etc/at.deny文件,写在该文件的使用者不能使用at,否则就可以使用。如果两个文件都不存在,那么只有root才能使用at指令。

    在一般的linux系统中,只会存在一个空的/etc/at.deny,意味着所有人都可以使用at指令。

    at的用法

    五分钟后执行任务:at now + 5 minutes

    设置具体时间:at 23:00 2015-08-04

    执行at命令后会开启at shell环境,用户可以在其中下达指令,这种状态下回车不会结束,按ctrl+d会结束命令输入。注意输入命令时要用绝对路径来下达指令,避免环境变量更换带来的问题。此外在at中下达echo命令不会在规定时间打印到控制台,这是因为at此时的环境与终端无关,所有的输出都会送到执行者的mailbox中,此时应该检查终端机的装置,把echo替换成echo "Hello" > /dev/tty1

    在设置完at任务后,可以看见job的号码,执行at -c 2可以查看第2个job在执行时的一些附加指令内容,包括环境变量的设置等。

    查看主机上多少at工作排程:atq,此时每行的第一个数字为工作号码

    移除at工作排程:atrm 工作号码

    背景执行与batch命令

    at有一个很大的优点是背景执行,当远程连接到linux执行at任务时,即使连接中断也不会影响at任务的执行,这是因为at工作独立于当前的bash环境,直接交给系统的atd程序接管。

    batch命令效果和at相同,不能加时间参数,而是在CPU工作负载小于0.8时,才进行你所下达的工作任务。相当于自动在系统空闲时执行任务。(工作负载是CPU所负责的工作数量)

    系统定时任务crontab

    系统中的crontab(cron/crond)服务是定时相关的,它是自动开启的,要使用定时任务必须确保其开启。

    执行crontab的过程

    和at命令一样,crontab也可以建立两个配置文件:/etc/cron.allow和/etc/cron.deny,前者比后者优先级要大,系统会默认建立一个/etc/cron.deny,执行crontab命令时会先检查这两个文件是否有执行权限。

    当用户执行crontab时,工作内容就会记录到/var/spool/cron/里去,根据用户名的不同被记录到不同的位置,如abc用户的工作被记录到/var/spool/cron/abc中,这些文件都无法直接用vi编辑。可以经常检查一些这些位置,如果有来源不明的文件可能是感染了木马。

    crontab的用法

    crontab命令执行格式:crontab [选项],-e代表编辑crontab定时任务,-l代表查询crontab任务,-r代表删除当前用户所有的crontab任务。

    进入编辑状态后可以编辑定时任务,相当于使用的是vim编辑器,此时的格式是* * * * * 执行的任务,五个*代表指定任务执行的时机。

    分钟数一般不能为*,否则代表每分钟都执行一次。

    10 * * * *代表1点10分执行、2点10分执行。。。

    星期几和几号同时出现时,只要一个满足要求就会执行。

    常常用定时任务来执行脚本,但是注意当脚本中有date命令时:

    date=$(date +%y%m%d)这个命令在定时执行时必须在%前加转义符:date=$(date +\%y\%m\%d),因为对crontab命令来说%有特殊作用。

    通过命令删除定时任务时只能删除全部,不能删某个,此时要编辑定时任务来删掉对应命令。

    其他配置文件

    之前的/var/spool/cron/内部记录的是各用户的定时任务,如果要执行系统的例行性任务可以直接修改文件/etc/crontab,cron服务每分钟会检查/var/spool/cron/和/etc/crontab中的内容并执行。(有时也会遇到不能执行的情况,此时可以重启crond服务:systemctl restart crond

    第一行指定了使用哪种shell;第二行重新定义了PATH;第三行的意思是例行性工作指令发送错误时,错误讯息会给root发一封邮件;重点的是设置例行任务的格式,在要执行的命令前多了一个用户名,代表执行命令的指令是以什么身份。

    与例行任务有关的还有一个目录/etc/cron.d/*,开发软件时会把一些定时任务配置文件放入其中。

    /etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/里面可以放一些脚本,系统会每小时、每天、每周、每个月自动执行。

    资源不均问题

    如果执行多个定时任务时可能会出现几个任务同时执行,使系统很繁忙,可以这样设置定时任务让多个任务错开执行:

    anacron程序

    假如有一个备份的定时任务要深夜执行,但是却遭遇停电,重新启动linux后,如果还想让该备份任务执行而不是直接跳过,就要用到anacron。它可以处理因某些原因超过时间而没有执行的排程工作。

    anacron会定期执行,而且会读取时间记录文件,查看上次执行anacron是什么时候,如果发现中断了一段时间,系统就认为定时任务没有执行,anacron就会开始执行未开始的定时任务。

    anacron本质上是一个程序,默认一小时执行一次,该脚本在/etc/cron.hourly/0anacron,这个脚本内部会执行:/usr/sbin/anacron -s这个命令,这个命令会根据配置文件的值执行一系列job。这个配置文件就是/etc/anacrontab:

    RANDOM_DELAY=45代表随机给予最大延迟时间是45分钟

    START_HOURS_RANGE=3-22代表延迟3-22个小时执行任务

    最下面三行代表每日、每周、每个月都要执行对应目录下的脚本,第一个数字是天数(超过1天就要执行每日任务,这代表每日定时任务因为某些原因被推迟了,超过7天就要执行每周任务。。)、第二个数字是延迟时间(决定执行定时任务后延迟5分钟后开始,避免刚刚开机任务密集)、第三个字段是任务名称、最后是实际执行的指令,代表执行对应文件夹下的全部指令。

    以上述文件倒数第三行为例,anacron的大致执行流程如下:

    1、从/var/spool/anacron/cron.daily中取出最近一次执行anacron的时间戳,与/etc/anacrontab中的天数对比,如果超过就决定执行指令。

    2、根据/etc/anacrontab中的设置,要延迟3小时+5分钟执行每日任务

    3、run-parts命令会在约5分钟内随机选一个时间执行/etc/cron.daily/中的全部任务

    综上所述,如果仅仅是执行crontab命令则不会执行错过的任务,但是如果把脚本放置在/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/下,就会在开机后主动执行,这也就是为什么开机一段时间后开始运行很多任务的原因,就是因为很多系统定时任务都是以anacron程序的方式执行。

  • 相关阅读:
    结语
    Print all nodes at distance k from a given node
    Construct a tree from Inorder and Level order traversals
    Transform a BST to greater sum tree
    Minimum no. of iterations to pass information to all nodes in the tree
    Print a Binary Tree in Vertical Order
    Rearrange a string so that all same characters become d distance away
    Suffix array
    cocos2d-x 3.2 椭圆运动
    cocos2d-x 3.2 DrawNode 绘图API
  • 原文地址:https://www.cnblogs.com/yinyunmoyi/p/12538985.html
Copyright © 2011-2022 走看看