1.at一次性定时执行任务
1)访问控制
-如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)
-如果系统中没有/etc/at.allow文件,只/etc/at.deny文件,那么写入/etc/at.deny文件(黑名单)中的用户不能使用at命令。对root不起作用
-如果系统中这两个文件都不存在,那么只有root用户可以使用at命令
2)at命令格式
at[选项]时间
选项:
-m: 当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
-c 工作号:显示该at工作的实际内容
时间:
/--HH:MM 例如:02: 30
-HH:MM YYYY-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
例子 1 指定时间执行脚本
at now +2 minutes
在两分钟之后执行hello.sh脚本
at>/root/hello.sh
at> ctrl + D保存退出
此时
atq查看at定时任务:
[root@redhat74 shell]# atq
3 Mon Apr 20 08:43:00 2020 a root
at -c 工作号查看at任务详情
例子 2 指定时间重启
at 08:55 2020-04-20
at>/sbin/sync --把内存中的数据同步至硬盘
at>/sbin/shutdown -r now
atq 查询当前服务器的at工作
atrm [工作号] 删除指定的at任务
2.crontab定时循环任务
1)访问控制
当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高
当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab 命令
2)crontab命令格式
/--crontab
-e 编辑定时任务
-l 查询定时任务
-r 删除当前用户所有定时任务--/
用法:
crontab -e进入crontab编辑界面
* * * * * 执行的任务 (cat /etc/crontab可查看 * 定义)
项目 含义 范围
第一个"*" 一小时当中的第几分钟 0-59
第二个"*" 一天当中的第几小时 0-23
第三个"*" 一个月当中的第几天 1-31
第四个"*" 一年当中的第几月 1-12
第五个"*" 一周当中的星期几 0-7(0和7都代表星期日)
3)特殊符号含义
特殊符号 含义
* 代表任何时间。比如第一个 "*" 就代表一小时中每分钟都执 行一次的意思。
, 代表不连续的时间。比如 "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分执行命令 (此处切记不是 * 17,* 17表示17点的每分钟执行一次)
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分都会执注意(或的关系):星期几和几号最好不要同时出现,它们定义的都是天。非常容易让管理员混乱
4)crontab注意事项
六个选项都不能为空,必须填写。如果不确定使用“*”代替任意时间
crontab定时任务,最小有效时间是分钟,最大时间范围是月,像2018年某时执行,3点30分30秒这样的时间都不能识别
在定义时间时,日期和星期最好不要在一条定时任务中出现因为它们都是以天作为单位,非常容易让管理员混乱
在定时任务中,不管是直接写命令,还是在脚本中写命令,请用绝对路径
3.系统的crontab设置
1)crontab -e 是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时就需要编辑/etc/crontab这个配置文件了
使用范例:
vi /etc/crontab
添加5 5 * * * root /shell/hello.sh
2)执行系统的定时任务的方法
-手工执行定时任务,crontab -e
-系统定时任务
- 第一种是把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个(不同的目录代表不同的执行频率)
- 第二种是修改/etc/crontab配置文件
4.anacron
1)anacron 配置保证在系统关机时候错过的定时任务,可以在系统开机之后再执行
2)anncron 会以一天,一周,一个月做为检测周期
在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,用于记录上次执行cron的时间
和当前时间做比较,若是两个时间差超过了anacron的指定时间差值,证明有cron任务被漏执行
3)anacron 在centos 6.x中 ,不再是服务,而是系统命令可以直接执行
4)anacron 配置文件
vi /etc/anacrontab
RANDON_DELAY=45 #最大随机延迟
START_HOURS_RANGE=3-22 #执行的时间范围是3点到22点
cron.daily工作来说明执行过程
-首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间
-和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily目录下的脚本;超过7天,执行cron.weekly
-执行这个工作只能在03:00-22:00之间
-执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间(所以通常在03-22时,开机50分钟,确保会执行漏掉的日常执行文件)
-使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件