Linux的计划任务分为两类:
1,一次性执行:
常用命令:at, batch,依赖于atd服务
2,周期性执行:
常用命令:crontab,依赖于crond服务
一次性任务执行:
用法:
#at TIME
at> /bin/sync 输入需要执行的命令或脚本
at> “Ctrl+d” 输入Cry+d提交任务
TIME:的几种格式
#at now+3min 相对时间
#at 11:30 或是绝对时间
#at noon, midnight, teatime(4:00pm) 或是模糊时间
man at查看其他详细时间表示方法
at命令选项:
-m:当at工作完成后,即使没有输出信息,也会以mail通知用户工作已完成
-l:列出当前正在等待执行的任务队列
#at -l= #atq
-d:删除尚未执行的任务
#at -dJOB_ID = atrm JOB_ID
-f:指定执行对应目录下的脚本
#at-f /PATH/TO/AT_SCRIPT TIME 指定执行对应目录下的脚本
此处/PATH/TO/AT_SCRIPT称为at脚本
例:at的使用实例
通常在改远程主机ip之前,为避免修改后的新IP不通,导致无法连接,此场景中则可以先执行一个at任务
#at now 10min
at>ifconfig eth0 IP ##此IP为目前在使用的正确的IP
先发送此at任务,再去改IP,即使改错,10分钟后也会自动恢复。
与at的不同是,batch可以不需要指定时间,自动选择系统空闲时执行。在计划执行某些批处理任务的场合时,可能使用到,使其自己评估选择系统空闲时执行。
周期性任务:
周期性任务有两类:
系统类周期性任务:/etc/crontab
用户类周期性任务:/var/spool/cron/USERNAME
系统cron的定义:
方法:
1、#vim /etc/crontab 此配置文件中添加计划任务
2、#service crond restart 重启crond服务,使刚添加的计划任务生效
系统cron的配置文件/etc/crontab中7个字段的含义:
#cat/etc/crontab
# 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(第七字段)
用户cron的定义:
方法:
#crontab -e [-u USERNAME]
此命令自动打开编辑器,即可新建任务、修改原有任务、删除原有任务,然后保存即可。此命令编辑文件提供语法检查功能,而通过vim并不会。类似visudo。
保存后的cron文件自动保存在 /var/spool/cron/USERNAME文件中,此文件中定义6个字段,意义同配置文件/etc/crontab中相同,只是去掉user-name段,即与系统cron相比,用户cron无需指定用户身份
crontab命令的选项:
-e:打开当前系统的默认文本编辑器,来定义用户cron
-r: 移除配置文件,会删除所有任务;
(若删除某指定任务,crontab -e打开文件删除对应行即可)
-l: 列出周期性任务
-u USERNAME:管理员以其他用户身份定义crontab,并且会保存对应用户名的目录下
E.g. #crontab-e -u user1 (所以即可实现root用户管理其他用户的任务)
cron配置文件中时间点的段,指定时间时可使用如下通配符:
* :相应时间点的所有有效取值,即意为每
E.g. 3 4 * * * root cat /etc/fstab 每天4点3分以root用户执行命令cat/etc/fstab
3 4 * * 5 root cat /etc/fstab 每周五4点3分执行(周和月,通常不同时使用)
, :离散取值
E.g. 3,18,33,48 * * * * root cat /etc/fstab
表示每小时的第3分钟,18分钟….,即每5分钟执行1次
/ :定义指定取值范围内的频率
E.g. */3 * * * * root cat/etc/fstab 每3分钟执行一次
17 */3 * * * root cat /etc/fstab 每3小时的第17分钟执行一次,即实现每3小时执行一次- :连续取值:
E.g. 17 8-20/3 * * * root cat /etc/fstab 每天8点到20点每3小时执行一次
例:3 18 * * 2,5 每周执行2次(周二和周五)
2,328-18/3 * * 1-5 周一到周五,8点到18点每隔3小时,每半小时执行一次
72 */2 * * root tar -Jcf /backup/etc-`date '+%F'`.tar.xz /etc/* 每2天的凌晨2点7分执行备份一次/etc目录