zoukankan      html  css  js  c++  java
  • [RH134] 3-计划任务

    1.at计划任务

    at计划任务,只在某个指定的事件执行一次的任务。

    1)在某一天执行一个脚本

    [root@centos7 xx]# at 2020-3-25
    at> /bin/aa.sh
    at> <EOT>
    job 2 at Wed Mar 25 15:31:00 2020

    我们这里的时间只精确到了天,则任务执行的具体时间是提交任务的时间点(指定的那天)。例如这个例子,任务执行的时间点在2020-3-25的15:31:00。

    注意,提交计划任务,使用 Ctrl+D 。

    2)指定具体执行时间

    [root@centos7 xx]# at 10:00 2020-3-25   
    at> /bin/aa.sh
    at> <EOT>
    job 3 at Wed Mar 25 10:00:00 2020

    注意,具体时间只能精确到分(不能精确到秒),时间是采用的24小时制。

    3)一段时间之后执行

    [root@centos7 xx]# at 4:00 + 1weeks
    at> /bin/aa.sh
    at> <EOT>
    job 4 at Mon Mar 30 04:00:00 2020

    一周后的那天的早上4点执行。时间单位有:minutes, hours, days, weeks。如果在某段时间后的此时执行,可以使用 at now + 3days 。

    4)查看已存在的计划任务

    [root@centos7 xx]# atq
    2       Wed Mar 25 15:31:00 2020 a root
    3       Wed Mar 25 10:00:00 2020 a root
    4       Mon Mar 30 04:00:00 2020 a root
    6       Thu Mar 26 15:38:00 2020 a root
    [root@centos7 xx]# at -l
    2       Wed Mar 25 15:31:00 2020 a root
    3       Wed Mar 25 10:00:00 2020 a root
    4       Mon Mar 30 04:00:00 2020 a root
    6       Thu Mar 26 15:38:00 2020 a root

    5)如何查看at计划任务具体执行的内容

    cd /var/spool/at
    [root@centos7 at]# ls
    a0000201931e03  a0000301931cb8  a0000401933770  a00006019323aa  spool

    可以看到,所有计划任务对应的文件,第5位的数字对应计划任务的编号。我们可以打开文件:

    [root@centos7 at]# cat a0000201931e03 
    #!/bin/sh
    # atrun uid=0 gid=0
    ...
    ...
    ${SHELL:-/bin/sh} << 'marcinDELIMITER59a4f86f'
    /bin/aa.sh

    在最后,我们可以看到我们执行的脚本是 /bin/aa.sh 。

    6)删除at计划任务

    [root@centos7 at]# atrm 2
    [root@centos7 at]# at -d 3

    使用atrm或at -d加上任务编号就可以删除。

    删除1-6号任务:

    atrm {1..6}

    7)计划任务的权限

    如果我们不想让某个用户拥有做计划任务的权限,可以编辑 /etc/at.deny :

    leo
    kale

    将需要拒绝的用户名写到文件中,一行一个用户名。

    如果想让leo用户恢复权限,可以从at.deny中删除leo,或者创建一个叫at.allow的文件,将leo写进去。at.allow的优先级高于at.deny。

    2.crontab计划任务

    Crontab计划任务是周期性运行的计划任务。

    1)查询已存在的crontab任务

    crontab -l  # 查询当前用户的任务
    crontab -l -u leo  # 查询leo用户的任务

    2)编辑crontab任务

    crontab -e  # 编辑当前用户的任务
    crontab -e -u leo  # 编辑leo用户的任务

    使用crontab -e会自动打开一个文件,该文件存在于 /var/spool/cron 目录下,名字为对应的用户名。例如, /var/spool/cron/root 。

    3)crontab内容格式

    # 格式如下
    # 分            时            日            月            周                命令
    0                7              *             *             *                 /bin/aa.sh    # 每天早上7点0分运行一次
    0                7              *             *             1,2,3,4,5      /bin/aa.sh   # 每周1到5的早上7点0分运行一次
    0                7              *             *             1-5              /bin/aa.sh   # 同上
    0                7              *             *             1-5/1           /bin/aa.sh   # 同上,1为步长
    0,5,10,30        7              *             *             *                 /bin/aa.sh   # 每天早上7:00,7:05,7:10,7:30各运行一次
    0-10/5,30        7              *             *             *                /bin/aa.sh   # 同上
    0                 7              *             1-12/2     *               /bin/aa.sh  # 奇数月的每天早上7:00运行一次
    0                 7              *             2-12/2     *               /bin/aa.sh  # 偶数月的每天早上7:00运行一次

    如果要实现每个月最后一天执行任务呢?每个月的天数可能是28、29、30、31。

    # 分            时            日            月                        周                命令
    0               7             31           1,3,5,7,8,10,12           *                /bin/aa.sh    # 在1,3,5,7,8,10,12月的31号运行
    0               7             30           4,6,9,11                     *                /bin/aa.sh    # 在4,6,9,11月的30号运行
    0               7             28           2                                *                /bin/aa.sh    # 2月28日运行一次,如果是闰年,则在27号被修改为29号
    0               7             27           2                                *                /bin/bb.sh    # 在2月27号的时候运行bb.sh,判断是否是闰年,如果是闰年,就修改该文件前一条的28日为29日。

    4)删除cron任务

    crontab -r  # 删除当前用户的所有crontab任务

    5)拒绝某个用户创建crontab任务

    同at任务一样,在/etc/cron.deny中添加用户名即可。

    vim /etc/cron.deny
    
    leo  # leo用户不能创建crontab任务

    如果要允许某个用户创建crontab,和at任务一样,从cron.deny中删除用户名,或添加一个cron.allow文件,写入用户名。

    6)/etc下的其他与cron相关文件

    [root@centos7 etc]# ls /etc/cron*
    /etc/cron.deny  /etc/crontab
    
    /etc/cron.d:
    0hourly  raid-check  sysstat
    
    /etc/cron.daily:
    logrotate  man-db.cron  mlocate
    
    /etc/cron.hourly:
    0anacron  mcelog.cron
    
    /etc/cron.monthly:
    
    /etc/cron.weekly:

    可以看到,除了cron.deny,还有cron.daily、cron.hourly、cron.monthly、cron.weekly,这些文件中都是保存对应周期要执行的任务。

    cron.d中的sysstat是每隔一段时间收集系统状态数据,内容如下:

    [root@centos7 etc]# cat cron.d/sysstat 
    # Run system activity accounting tool every 10 minutes
    */10 * * * * root /usr/lib64/sa/sa1 1 1
    # 0 * * * * root /usr/lib64/sa/sa1 600 6 &
    # Generate a daily summary of process accounting at 23:53
    53 23 * * * root /usr/lib64/sa/sa2 -A

    即,每隔10分钟,执行以下sa1命令,收集数据。

    ===

  • 相关阅读:
    TreeMap Red-Black tree
    Java实现生产者消费者问题与读者写者问题
    一个对象占用多大内存
    MySQL索引背后的数据结构及算法原理
    Java并发编程与技术内幕:线程池深入理解
    Java Spring 中你不知道的注入方式
    面试中的排序算法总结
    JAVA反射
    StringBuilder与StringBuffer的区别
    Java多线程总结【转】
  • 原文地址:https://www.cnblogs.com/leokale-zz/p/12543681.html
Copyright © 2011-2022 走看看