一、at一次性定时任务
1、确定at安装
- chkconfig --list | grep atd(at服务是否安装)
- service atd restart(at服务是否启动)
2、at的访问控制
- 如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow 文件(白名单)中的用户可以使用at命令(/etc/at.deny文件会被忽略)
- 如果系统中没有/etc/at.allow 文件,只有/etc/at.deny文件,那么写入/etc/at.deny(黑名单)文件中的用户不能使用at命令。对root不起作用
- 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令
3、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];例如at now + 5 minutes
- atq 查看当前的at任务
- atrm [工作号] 删除at任务
二、crontab循环定时任务
1、crond服务管理与访问控制
- service crond restart
- chkconfig crond on
2、访问控制
- 当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高
- 当系统只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令
3、用户的crontab设置(绑定了用户身份)
- crontab [选项]
- 选项:
- -e:编辑crontab定时任务
- 格式:***** 执行的任务(每小时每分钟)
- 第五个:一周中的星期几(0-7,0和7都是周日)
- 第四个:一年中的第几个月(1-12)
- 第三个:一个月中的第几天(1-31)
- 第二个:一天中的第几小时(0-23)
- 第一个:一小时中的第几分钟(0-59)
- *:任意时间。具体看下面
- ,:代表不连续的时间。比如“0 8,12,16 * * * 命令”代表每天8.0分,12.0分,16.0分都执行一次
- -:代表连续的时间范围。比如“0 5 * * 1-6 命令”代表周一到周六凌晨5.0分执行
- */n:代表没隔多久执行一次。比如“*/10 * * * * 命令”代表每个10分钟执行一次
- 格式:***** 执行的任务(每小时每分钟)
- -l:查询crontab任务
- -r:删除当前用户所有的crontab任务(清一个直接进crontab -e 删除那一行)
- -e:编辑crontab定时任务
4、注意事项:
- 六个选项不能为空,必须填写。如果不确定使用“*”代替任意时间
- crontab定时任务,最小有效时间是分钟,最大时间范围是月
- 日期和星期都是以天为单位,最好不要在一条定时任务中
- 定时任务中,不管直接写命令还是在脚本中写命令,最好都是用绝对路径(定时任务有自带的环境变量,跟系统的有差别)
三、系统crontab的设置(通过配置文件)
“crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab这个设置文件了。即让root用户自定义将定时任务绑定到指定用户身上
vim /etc/crontab 进去有
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
1,centos5中的配置文件
只用将写好的脚本放入上方四个文件(cron.hourly、cron.daily、cron.weekly、cron.monthly)即可,系统会自动执行。centos6中也保留了上方四个文件只是不是/etc/crontab和anacron混合管理,而是直接交给anacron管理,避免了重复执行 。anacron不再是服务,而是系统命令,可以直接执行。
2,执行系统的定时任务方法
- 第一种crontab -e
- 第二种是把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个
- 第三种是修改/etc/crontab配置文件(其实是和crontab -e一样的)
四、anacron配置
ancron 是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行(anacron只会检测上面那四个文件的定时任务,不会检测其他)
1、检测周期
- anacron会使用一天,七天,一个月作为检测周期
- 在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}临时文件,用于记录上次执行cron的时间(精确到天)
- 和当前时间作比较,如果两个时间的差值超过了anacron的指定时间差值,证明有cron任务被漏执行
2、anacron配置文件
- vim /etc/anacrontab
- RANDOM_DELAY=45 #最大随机延迟
- START_HOURS_RANGE=3-22 #anacron的执行时间范围是3:00-22:00
- 1 5 cron.daily nice run-parts /etc/cron/daily #超过天数 强制延迟(分) 工作名称 实际执行的命令
3、cron。daily工作来说明执行过程
- 首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间
- 和当前时间比较,如果两个时间差值超过一天,就执行cron.daily工作。。。。。
- 执行这个工作只能在03:00-22:00之间
- 执行工作时强制延迟时间为5分钟,在随机延迟0-45分钟时间
- 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件
4、缺陷
不知道啥时候执行,不可控。但是优胜于劣..