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
[[email protected] ~]# at 2:29 #指定计划任务
at> ls
at> <EOT>
job 1 at Tue May 9 02:29:00 2017 #退出时按ctrl+d
[[email protected] ~]# at –l #查看等待的任务
3 2017-04-04 06:42 a root
2 2017-04-03 12:00 a root
[[email protected] ~]# 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]:规定在某个时间点再加多少时间后才进行
[[email protected] ~]# at 2:36 pm
at> touch day123.txt
at> echo hello
at> <EOT>
[[email protected] ~]# 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(明天)来指定完成命令的时间
[[email protected] ~]# at noon #在中午执行
at> ls –l
[[email protected] ~]# at tomorrow #在明天这个时候执行任务
at> wall hi
(4)任务的执行方式
1)交互式
2)输入重定向
3)at –f
[[email protected] ~]# at 12:00 #交互式执行任务
at> ls
at> <EOT>
job 4 at 2017-04-03 12:00
[[email protected] ~]# at 17:00 <ls #输入重定项执行任务
job 5 at 2017-04-03 17:00
[[email protected] ~]# 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)配置文件说明:
[[email protected] ~]# 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分执行
[[email protected] ~]# 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 #每月1至7号或十号或周一,周三执行脚本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中系统任务。
[[email protected] ~]# 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任务
[[email protected] ~]# 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
[[email protected] ~]# 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
[[email protected] ~]# 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。