计划任务,即是在约定好的时间执行计划好的任务,在Linux我们惊颤更使用crond服务来完成次工作,cron服务器可以根据配置文件约定好的时间执行特定的任务。比如说,我们在每天凌晨4点更新一次数据库,这既是计划任务。
Linux,实现计划任务有三种方式:
1 at 指定一个时间执行一次或多次任务,一次性使用
2 cron 根据配置文件的时间表自动执行任务,周期性执行
3 系统级别的任务计划及其扩展anacron:错过计划任务执行时间后尽快按照定义频率执行一次
下面我们来一个一个讲解:
一:at:
#at 08:08
>echo "Hello"
>Ctrl+d(结束)
上面几行表示在08:08分输出Hello,但是不会显示处理出来,因为执行结果会以邮件方式发送给执行用户。
at -l 或者是 atq 查询当前正在等待的计划任务,显示如下
2 2011-05-21 01:01 a root
1 2011-05-21 08:08 a root
前面的数字表示计划任务号
at -d 或者是 atrm 删除计划任务
atrm 1
atrm 2
也可以进入/var/spoll/at目录把计划任务删除,at的计划任务都保存在该目录中。
管理员用户有使用at的权限,普通用户是否可以使用at取决于/etc/at.allow和/etc/at.deny文件,两者都有责取allow。一般默认所有用户允许。
二:cron服务,周期性的执行某个计划任务
cron服务由vixie-cron-4.1-76.e15软件包提供,我们可以使用 rpm -qa(查询所有安装的软件包)| grep cron 查询该软件包是否安装,安装完启动cron服务。
cron依靠crontab文件保存用户定义的任务计划
crontab文件分为两类:分别是系统crontab和用户crontab
系统crontab: 定义在/etc/crontab
用户crontab:定义在/var/spool/cron/USERNAME
我们定义cron任务都是编写crontab文件完成,下面看一下crontab文件内的格式:
每一行的前五段是时间,第六段是命令
MIN HOUR DAY MONTH WEEK COMMAND
时间的取值范围:
MIN:0-59 HOUR:0-23 DAY:1-31 MONTH:1-12 WEEK:0-7(0和7都表示周日)
介绍下文件内符号的用法:
*:对应时间域上的所有有效取值
- : 对应时间域上的连续时间取值 8-18 表示第8到18
, : 对应时间域上的离散时间取值 8,18 表示第8 和第18
*/: 对应时间域上的没多久一次进行取值 例如:*/8 每8min/hour/...一次
通过例子了解一下:
30 17 * * * /sbin/shutdown -h now 每天的5点30分关机
03 02 * * 3,6 /usr/bin/yum clean all 每周3周6的凌晨2点3分清空yum缓存
00 */6 * * * /usr/bin/updatedb 每六小时更新一次数据库
* */6 * * * /usr/bin/updatedb 则表示每第6个小时的每分钟都更新一次
定义自己的crontab:
# crontab -e 编辑当前用户的cron表
# crontab -l 列出当前用户的cron表
# crontab -r 删除当前用户的cron进程
# cron -u USERNAME 管理员权限帮别人定义 crontab -u USERNAME [-l | -r | -e]
当然,我们也可以不打开文件添加内容到crontab中:
echo '10 1 * * 7 tar -jcf /backup/data-`date '+%F'`.tar.bz2 /data' >> /var/spool/cron/USERNAME
echo '10 1 * * 7 tar -jcf /backup/data-`date '+%F'`.tar.bz2 /data' | crontab
系统crom:
/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
run-parts 表示将指定目录中的脚本顺序执行一次
anacron:
anacrontab文件是系统计划任务的扩展文件:在一个指定时间间隔错过后自动执行任务。也就是说如果定义事件计算机关闭了,开机会它会尽快按定义频率执行一次。
定义文件 /etc/anacrontab
每一段的含义:
过去多长时间未执行(天) 启动延迟(开机后多久执行) 说明信息 把文件中的脚本执行一遍
1 65 cron.daily run-parts /etc/cron.daily
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
第一行的意思是:每天开机65分钟后检查/etc/cron.daily中的脚本是否被执行了,如果今天没有被执行就执行它
第二行的意思是:每隔7天开机后17分后检查/etc/cron.weekly中的脚本是否被执行,如果一周内都没有执行,便执行它
第三行也是一样~
需要知道,在/etc/crontab与/etc/anacrontab文件中定义的目录内,脚本前的数字越小,越先执行。
用户使用cron的权限在下面两个文件中定义:
/etc/cron.allow
/etc/cron.deny
如果两文件都不存在 只有管理员能够使用cron
一般我们系统只有deny文件 只定义拒绝使用cron的用户
如果两个文件中存在同一用户,则allow优先,用户可以使用cron
(被拒绝用户不可以使用crontab,但还可以使用at定义计划任务)