首页 > 代码库 > linux系统下定时任务

linux系统下定时任务

linux系统定时任务

1、Linux系统定时任务at

(1)作用:定时任务,指定一个时间执行一个任务,只能执行一次

(2)用法:at [option] TIME

     选项:-V 显示版本信息:

         -l:列出指定队列中等待运行的作业;相当于atq

         -d: 删除指定的作业;相当于atrm

         -c:查看具体作业任务

         -f/path/from/somefile:从指定的文件中读取任务

         -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

     注:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户, at命令依赖于atd服务,需要启动才能实现at任务。

    退出at命令:ctrl+d

[root@dayi123 ~]# at 2:29          #指定计划任务

at> ls

at> <EOT>

job 1 at Tue May  9 02:29:00 2017    #退出时按ctrl+d

[root@dayi123 ~]# at –l             #查看等待的任务

3      2017-04-04 06:42 a root

2      2017-04-03 12:00 a root

[root@dayi123 ~]# at -d 1           #删除指定的作业

(3)时间(TIME):定义出什么时候要进行at的任务

常用的时间格式有:

   1)HH:MM:在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此任务。

   2)HH:MM YYYY-MM-DD:规定在某年某月的某一天的特殊时刻进行该项任务

   3)HH:MM[am|pm] [Month][Date]:规定在某年某月某日的某时刻进行该项任务

   4)HH:MM[am|pm] + number[minutes|hours|days|weeks]:规定在某个时间点再加多少时间后才进行

[root@dayi123 ~]# at 2:36 pm

at> touch day123.txt

at> echo hello

at> <EOT>

[root@dayi123 ~]# at now + 5 hours

at> date

at时间格式的扩展:

   1)能够接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。

   2)能够使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。

   3)能够采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午

   4) 能够指定命令执行的具体日期,指定格式为monthday(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。

   5)能够使用相对计时法。指定格式为:now +count time-units ,now就是当前时间,time-units是时间单位,这里能够是minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。

   6)能够直接使用today(今天)、tomorrow(明天)来指定完成命令的时间

[root@dayi123 ~]# at noon   #在中午执行

at> ls –l

[root@dayi123 ~]# at tomorrow #在明天这个时候执行任务

at> wall hi  

(4)任务的执行方式

   1)交互式

   2)输入重定向

   3)at –f

[root@dayi123 ~]# at 12:00      #交互式执行任务

at> ls

at> <EOT>

job 4 at 2017-04-03 12:00

[root@dayi123 ~]# at 17:00 <ls   #输入重定项执行任务

job 5 at 2017-04-03 17:00

[root@dayi123 ~]# at 15:00 -f ls   #通过-f指定命令存放文件执行任务

job 6 at 2017-04-03 15:00

(4)限制用户的使用权限

   控制文件目录:/etc/at.allow和/etc/at.deny

   控制文件使用规则:

    1)先找寻 /etc/at.allow 这个文件,写在这个文件中的使用者才能使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中);

    2)如果 /etc/at.allow 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用者就可以使用 at 命令。

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

    4)在一般的 distributions 当中,由于假设系统上的所有用户都是可信任的,因此系统通常会保留一个空的 /etc/at.deny 文件,意思是允许所有人使用 at 命令的意思。

    5)如果不希望有某些使用者使用 at 的话,将那个使用者的帐号写入 /etc/at.deny 即可! 一个帐号写一行。

(5)at队列存放目录:/var/spool/at/

2、Linux系统定时任务cron

(1)概述:

   1)作用:周期性任务计划

   2)相关的程序包:

    cronie: 主程序包,提供crond守护进程及相关辅助工具

    cronie-anacron:cronie的补充程序,用于监控cronie任务执行状况,如cronie中的任务在过去该运行的时间点未能正常运行,则anacron会随后启动一次此任务

    crontabs:包含CentOS提供系统维护任务

   3)使用前要确保crond守护处于运行状态:

    CentOS 7:systemctlstatus crond

    CentOS 6:service crondstatus

   4)运行原理:计划周期性执行的任务提交给crond,到指定时间会自动运行

    系统cron任务:/etc/crontab

    用户cron任务:crontab命令

    日志:/var/log/cron

(2)系统定时任务

   1)配置文件说明:

[root@dayi123 ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# For details see man 4 crontabs

 

# Example of job definition:

# .---------------- minute (0 - 59)    #第一个*,代表一小时当中的第几分钟

# | .------------- hour (0 - 23)     #第二个*,代表一天当中的第几个小时

# | |  .---------- day of month (1 -31)  #第三个*,代表一个月当中的第几天

# | |  |  .------- month (1 - 12) OR jan,feb,mar,apr...  #第四个*,代表一年当中的第几个月

# | |  |  | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat  #代表一周中第几天

# | |  |  |  |

# * *  *  *  *user-name command to be executed #user-name代表以哪个用户身份去执行,后面为命令

   2)时间表示法:

    特定值:给定时间点有效取值范围内的值

    *:给定时间点上有效取值范围内的所有值,表示“每...”

    离散取值:#,#,#

    连续取值:#-#

    在指定时间范围上,定义步长/#: #即为步长

    注:如果同时出现周和日期为或的关系,只出现周或日期为且的关系

    特殊的时间格式:

       @yearly 0 0 1 1 *    #每年执行一次,此处为每年1月1日0时0分执行

       @annually 0 0 1 1 *  #每年执行一次,此处为每年1月1日0时0分执行

       @monthly 0 0 1 * *  #每月执行一次,此处为每月1日0时0分执行

       @weekly 0 0 * * 0   #每周执行一次,此处为每周日0时0分执行

       @daily 0 0 * * *     #每天执行一次,此处为每天的0时0分执行

       @hourly 0 * * * *   #每小时执行一次,此处为每小时0分执行

[root@dayi123 ~]# tail -3 /etc/crontab

45 22 * * * root /sbin/reboot   #每天22:45执行重启命令

*/10 * * * * root /usr/bin/who >>who.log   #每隔10分钟执行一次命令who,将执行结果保存在who.log

0 0 1-7,10 * 1,3 root /bin/bash/data/lograta.sh #每月17号或十号或周一,周三执行脚本lograta.sh

(3)anacron系统

   1)系统计划任务相关配置文件

       /etc/crontab  #系统计划任务

       /etc/cron.d/配置文件

       /etc/cron.hourly/#每小时的计划任务

       /etc/cron.daily/   #每天的计划任务

       /etc/cron.weekly/#每周计划任务

       /etc/cron.monthly/脚本

   2)作用:运行计算机关机时cron不运行的任务,CentOS6以后版本取消anacron服务,由crond服务管理

   3)配置文件:/etc/anacrontab,负责执行/etc/cron.daily/etc/cron.weekly/etc/cron.monthly中系统任务。

[root@dayi123 ~]# cat /etc/anacrontab

# /etc/anacrontab: configuration file foranacron

# See anacron(8) and anacrontab(5) fordetails.

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

# the maximal random delay added to the basedelay of the jobs

RANDOM_DELAY=45

# the jobs will be started during thefollowing hours only

START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command

1      5       cron.daily              nice run-parts /etc/cron.daily

7      25      cron.weekly             nice run-parts /etc/cron.weekly

@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

   4)由/etc/cron.hourly/0anacron执行,当执行任务时,更新/var/spool/anacron/cron.daily文件的时间戳。

(4)管理临时文件

   1)CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

   2)CentOS7使用systemd-tmpfiles-setup服务实现

(5)用户计划任务crontab命令

   1)每个用户都有专用的cron任务文件,存放目录为/var/spool/cron/USERNAME

   2)crontab命令用法:crontab[-u user] [-l | -r | -e] [-i]

     用法同系统定时任务cron,只是在命令前不需要加执行的用户

     选项说明:-l: 列出所有任务;

            -e: 编辑任务;

            -r: 移除所有任务;

            -i:同-r一同使用,以交互式模式移除指定任务

            -u user: 仅root可运行,指定用户管理cron任务

[root@dayi123 ~]# crontab  -e   #编辑定时任务

no crontab for root - using an empty one

10 4 1 * * /data/scripts/backup.sh  >/dev/null &>1

30 3 * * mon cat /proc/meminfo >>/tmp/meminfo

0 */3 * * * /bin/bash /data/scripts/who.sh>/dev/null &>1

[root@dayi123 ~]# crontab  -l    #查看定时任务

10 4 1 * * /data/scripts/backup.sh  >/dev/null &>1

30 3 * * mon cat /proc/meminfo >>/tmp/meminfo

0 */3 * * * /bin/bash /data/scripts/who.sh>/dev/null &>1

[root@dayi123 ~]# crontab  -r   #移除所有的定时任务

   3)限制用户cron使用权限(用法同at命令限制用户权限):

    /etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

    无论使用控制文件中的规定如何,根用户都总是可以使用cron。

    如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。

    如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron,其他用户可以正常使用cron

    如果cron.allow和cron.deny都不存在时,实拒绝除root外的所有用户使用cron。     


本文出自 “dayi123” 博客,请务必保留此出处http://dayi123.blog.51cto.com/12064061/1924338

linux系统下定时任务