系统定时任务

时间:2021-10-12 07:46:55

系统定时任务

  • at 一次性定时任务

    确定at安装

    chkconfig –list | grep atd:at服务是否安装

    service atd restart:at服务的启动

    at的访问控制

    如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)

    如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令。对root不起作用。

    如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。

    at命令

    at [选项] 时间

    选项:

    -m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户。

    -c 工作号:显示该at工作的实际内容

    时间:

    -HH:MM 02:30
    -HH:MM YYY-MM-DD 02:30 2013-07-25
    -HH:MM [am|pm] [month][date] 02:30 July 25
    -HH:MM [am|pm] + [minutes|hours|days|weeks] now+5 minutes

    at now + 2 minutes #在两分钟之后执行hello.sh脚本 at> /root/hello.sh >> /root/hello.log

    at 02:00 2013-07-26 #在指定的时间重启 at> /bin/sync; at> /sbin/shutdown -r now

    atq #查询当前服务器上的at工作

    atm [工作号] #删除指定的at任务

  • crontab 循环定时任务

    crond服务管理与访问控制

    service crond restart

    chkconfig crond on

    当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。

    当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令。

    用户的crontab设置

    crontab [选项]

    选项:

    -e:编辑crontab定时任务

    crontab -e #进入crontab编辑界面。会打开vim编辑你的工作。*执行的任务。

    第一个*:一小时当中的第几分钟 0-59

    第二个*:一天当中的第几小时 0-23

    第三个*:一个月当中的第几天 1-31

    第四个*:一年当中的第几个月 1-12

    第五个*:一周当中的星期几 0-7(0和7都代表星期日)

    *:代表任何时间。比如第一个“*”就代表一小时中每分钟都执行一次的意思。

    ,:代表不连续的时间。比如“0 8,12,16***命令”,就代表在每天8点0分,12点0分,16点0分都执行一次命令。

    -:代表连续的时间范围。比如“0 5 * * 1-6命令”,代表在周一到周六的凌晨5点0分执行命令。

    /n:代表每隔多久执行一次。比如“*/10 * * *命令”,代表每隔10分钟就执行一遍命令。

    45 22 * * *命令:在22点45分执行命令

    0 17 * * 1命令:每周1的17点0分执行命令

    0 5 1,15 * *命令:每月1号和15号的凌晨5分0执行命令

    40 4 * * 1-5命令:每周一到周五的凌晨4点40分执行命令

    /10 4 * *命令:每天的凌晨4点,每隔10分钟执行一次命令

    0 0 1,15 * 1命令:每月1号和15号,每周1的0点0分都会执行。注意:星期几和几号最好不要同时出现,我们定义的都是天。非常容易让管理员混乱。

    -l:查询crontab任务

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

    crontab注意事项

    六个选项都不能为空,必须填写。如果不确定使用”*”代表任意时间

    crontab定时任务,最小有效时间是分钟,最大时间范围是月。像2018年某时执行,3点30分30秒这样的时间都不能识别。

    在定义时间时,日期和星期最好不要在一条定时任务中出现。因为它们都是以天作为单位,非常容易让管理员混乱。

    在定时任务中,不管是直接写命令,还是在脚本中写命令,最后都是用绝对路径。

  • 系统的crontab设置

    “crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这是我们就需要编辑/etc/crontab这个配置文件了。

    执行系统的定时任务的方法

    手工执行定时任务

    系统定时任务,包括以下两种:

    第一种:需要把定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个

    第二种:修改/etc/crontab配置文件

  • anacron配置

    anacron用来保证在系统关机的时候错误的定时任务,可以在系统开机之后再执行。

    aracron检测周期

    anacron会使用一天,七天,一个月作为检测周期

    在系统的/var/spool/anacron/目录中存在,cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间

    和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,证明有cron任务呗漏执行

    CentOS 6.x的区别

    在老的CentOS版本中,/etc/cron.{daily,weekly,monthly}这些目录即会被cron调用,也会被anacron调用,容易重复执行

    在CentOS 6.x中则只会被anacron调用,避免了重复执行

    在CentOS 6.x中,anacron不再是服务,而是系统命令

    anacron配置文件

    vi /etc/anacrontab

    -RANDOM_DELAY = 45 #最大随机延迟

    -START_HOURS_RANGE=3-22 #anacron的执行时间范围是3:00-22:00

    # 天数 强制延迟(分) 工作名称 实际执行的命令

    cron.daily工作来说明执行过程

    1)首先读取/va/spool/anacron/cron.daily中的上一次anacron执行的时间;

    2)和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作;

    3)执行这个工作只能在03:00-22:00之间

    4)执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间

    5)使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件