Linux任务计划
1,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用户可以使用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
ctrl+d保存退出
4)管理其他at命令
atq #查询当前服务器上的at工作
atem [工作号] #删除指定的at任务
2,crontab 循环定时任务
service crond restart #确保服务启动
chkconfig crond on #设置服务开机自启
1)访问控制
当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高
当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令
2)用户的crontab设置
crontab [选项]
-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有的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分钟就执行一次命令
|
3)常用命令
crontab -l #查看root用户的crontab任务
crontab -r #删除root用户所有的定时任务
4)注意事项
六个选项都不能为空,必须填写,如果不确定使用“*”代替任意时间。
crontab定时任务,最小有效时间是分钟,最大时间范围是月,日期和星期最好不要在一条定时任务中出现,因为他们都是以天作为单位,非常容易让管理员混乱。
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径。
3,系统的crontab设置
“crontab -e”是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。可是有些定时任务需要系统执行,这时我们就需要编辑/etc/crontab这个配置文件了
执行系统定时任务的方法
1)把需要定时执行的脚本复制到 /etc/cron.{daily, weekly, monthly, hourly} 目录中的任意一个【推荐】
2)修改/etc/crontab配置文件
4,anacron配置
1)acacron是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行
2)ancaron检测周期
anacron会使用一天,七天,一个月作为检测周期在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly)文件,用于记录上次执行cron的时间和当前时间做比较,若果两个时间的差值超过了anacron的指定时间差值,证明有cron任务被漏执行