zoukankan      html  css  js  c++  java
  • linux 例行性工作排程

    引言

    例行性计划工作排程可以分为一次性工作排程和循环工作排程,一次性的工作排程使用at服务,循环的工作排程使用crontab服务,一般系统运行crontab足以满足需求。

    1. 一次性工作排程的介绍:

    1.1 程序的启动

      默认at在centos是启动的,如果没有启动,可以使用如下方法启动服务。

    [root@www ~]# /etc/init.d/atd restart
    
    正在停止 atd:                          [  确定  ]
    
    正在启动 atd:                          [  确定  ]
    
    
    
    # 再配置一下启动时就启动这个服务,免得每次重新启动都得再来一次!
    
    [root@www ~]# chkconfig atd on
    
    如果是centos7则需要使用systemctl工具
    启动at的方法(默认启动了)

    1.2 at原理

      at 这个命令来产生所要运行的工作,并将这个工作以文字档的方式写入 /var/spool/at/ 目录内,该工作便能等待 atd 这个服务的取用与运行了,不过运行之前,还要经过如下过滤过程:

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

      提示:默认at是使用的/etc/at.deny这个文件(如果要拒绝用户,记得一个账号写一行)。

    1.3 at使用方法

    总结下:底下命令一大堆,其实不需要看的,只需要记住如下几个就可以了,具体用法请参照范例。

    at(创建任务),如果要创建系统空闲时间才运行的任务请使用batch。

    atq(列出任务)。

    atrm(删除某一任务)。

    [root@www ~]# at [-mldv] TIME
    
    [root@www ~]# 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 2009-03-17
    
        强制规定在某年某月的某一天的特殊时刻进行该工作!
    
      HH:MM[am|pm] [Month] [Date]    ex> 04pm March 17
    
        也是一样,强制在某年某月某日的某时刻进行!
    
      HH:MM[am|pm] + number [minutes|hours|days|weeks]
    
        ex> now + 5 minutes    ex> 04pm + 3 days
    
        就是说,在某个时间点『再加几个时间后』才进行。
    范例一:再过五分钟后,将 /root/.bashrc 寄给 root 自己
    
    [root@www ~]# at now + 5 minutes  <==记得单位要加 s 喔!
    
    at> /bin/mail root -s "testing at job" < /root/.bashrc
    
    at> <EOT>   <==这里输入 [ctrl] + d 就会出现 <EOF> 的字样!代表结束!
    
    job 4 at 2009-03-14 15:38
    
    # 上面这行资讯在说明,第 4 个 at 工作将在 2009/03/1415:38 进行!
    
    # 而运行 at 会进入所谓的 at shell 环境,让你下达多重命令等待运行!
    
    
    
    范例二:将上述的第 4 项工作内容列出来查阅
    
    [root@www ~]# at -c 4
    
    #!/bin/sh               <==就是透过 bash shell 的啦!
    
    # atrun uid=0 gid=0
    
    # mail     root 0
    
    umask 22
    
    ....(中间省略许多的环境变量项目)....
    
    cd /root || {           <==可以看出,会到下达 at 时的工作目录去运行命令
    
             echo 'Execution directory inaccessible' >&2
    
             exit 1
    
    }
    
    
    
    /bin/mail root -s "testing at job" < /root/.bashrc
    
    # 你可以看到命令运行的目录 (/root),还有多个环境变量与实际的命令内容啦!
    
    
    
    范例三:由於机房预计於 2009/03/18 停电,我想要在 2009/03/17 23:00 关机?
    
    [root@www ~]# at 23:00 2009-03-17
    
    at> /bin/sync
    
    at> /bin/sync
    
    at> /sbin/shutdown -h now
    
    at> <EOT>
    
    job 5 at 2009-03-17 23:00
    
    # 您瞧瞧! at 还可以在一个工作内输入多个命令呢!不错吧!
    at运行范例
    [root@www ~]# atq
    
    [root@www ~]# atrm (jobnumber)
    
    
    
    范例一:查询目前主机上面有多少的 at 工作排程?
    
    [root@www ~]# atq
    
    5       2009-03-17 23:00 a root
    
    # 上面说的是:『在 2009/03/1723:00 有一项工作,该项工作命令下达者为 
    
    # root』而且,该项工作的工作号码 (jobnumber) 为 5 号喔!
    
    
    
    范例二:将上述的第 5 个工作移除!
    
    [root@www ~]# atrm 5
    
    [root@www ~]# atq
    
    # 没有任何资讯,表示该工作被移除了!
    at管理范例
    范例一:同样是机房停电在 2009/3/17 23:00 关机,但若当时系统负载太高,则暂缓运行
    
    [root@www ~]# batch 23:00 2009-3-17
    
    at> sync
    
    at> sync
    
    at> shutdown -h now
    
    at> <EOT>
    
    job 6 at 2009-03-17 23:00
    
    
    
    [root@www ~]# atq
    
    6       2009-03-17 23:00 b root
    
    [root@www ~]# atrm 6
    at的补充batch,系统CPU负载0.8以下才开始运行任务

    2. 循环工作排程的介绍:

    2.1 理论知识

    使用者想要创建循环型工作排程时,使用的是 crontab 这个命令啦~不过,为了安全性的问题, 与 at 同样的,我们可以限制使用 crontab 的使用者帐号喔!使用的限制数据有:

    • /etc/cron.allow:
      将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab;
    • /etc/cron.deny:
      将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab 。

      与 at 很像吧!同样的,以优先顺序来说, /etc/cron.allow 比 /etc/cron.deny 要优先, 而判断上面,这两个文件只选择一个来限制而已,因此,建议你只要保留一个即可, 免得影响自己在配置上面的判断!一般来说,系统默认是保留 /etc/cron.deny , 你可以将不想让他运行 crontab 的那个使用者写入 /etc/cron.deny 当中,一个帐号一行!

      当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 /var/spool/cron/ 里面去了,而且是以帐号来作为判别的!举例来说, jet使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/jet里头去!但请注意,不要使用 vim 直接编辑该文件, 因为可能输入语法错误,会导致无法运行 cron !另外, cron 运行的每一项工作都会被纪录到 /var/log/cron 这个登录档中,所以,如果你的 Linux 不知道有否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档呢!

    2.2 使用方法

    [root@www ~]# crontab [-u username] [-l|-e|-r]
    
    选项与参数:
    
    -u  :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
    
    -e  :编辑 crontab 的工作内容
    
    -l  :查阅 crontab 的工作内容
    
    -r  :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
    
    
    
    范例一:用 dmtsai 的身份在每天的 12:00 发信给自己
    
    [dmtsai@www ~]$ crontab -e
    
    # 此时会进入 vi 的编辑画面让您编辑工作!注意到,每项工作都是一行。
    
    0   12  *  *  * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
    
    #分 时 日 月 周 |<==============命令串========================>|
     #tips:crontab -e编辑的内容分为6列,代表意义 分钟(0-59)  小时(0-23)  日期(1-31)  月份(1-12)  周(0-7)  命令(一定要使用绝对路径)
    
      #周的0或7都代表周日。
    crontab语法介绍

    59 23 1 5 *   #代表每年5月1日的23点59执行
    */5 * * * *   #代表每5分钟执行
    * * * * *      #代表每分钟执行
    30 16 * * 5  #代表每周五的下午4点半执行
    1,21,51 * * * *  #每小时的1、21、51这三个分钟数执行
    crontab时间写法范例

    2.3 注意事项

    • 定时任务的执行时间要错开,不要挤在一起执行。
    • 取消不需要的输出内容,可以把内容输出到文件或者/dev/null。
    • 安全问题, /var/log/cron 可以观察是否被木马入侵。
    • 周和日月不要同时使用。
  • 相关阅读:
    Byteart Retail V3 全新的面向.NET与领域驱动设计的企业应用实践案例
    算法设计和数据结构学习堆排序
    OutputCacheProvider OutputCache的一点点认识
    使用beetle简单地实现高效的http基础服务
    The IoC container
    使用Visual Studio 2010进行UI自动化测试
    PortalBasic Java Web 应用开发框架 v2.6.1(源码、示例及文档)
    发展中的 CSS3
    C#数据结构与算法揭秘十
    Sql Server Profiler跟踪查询
  • 原文地址:https://www.cnblogs.com/wangzengyi/p/12450012.html
Copyright © 2011-2022 走看看