一、linux下的任务调度
LInux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性索要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有crontab文件,这个就是系统任务调度的配置文件,只有系统管理员可以修改。
前四行是用来配置crond任务于宁的环境变量,第一行SHELL变量制定了系统要使用哪个shell,这是bash。
第二行PATH变量制定了系统执行命令的路径,第三行MAILTO变量制定了crond的任务执行细腻将通过电子邮件发送给root用户,如果MAILTO变量为空,则表示不发送任务任务执行信息给用户,第四行的HOME变量制定了在执行命令或脚本时使用的主目录。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用crontab工具来定制自己的计划任务,所有用户定义的crontab文件都被保存在
/var/spool/cron目录中。
二、crontab文件
crontab文件包含送交crond守护进程的一系列作业和指令。
crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute:表示分钟,0~59
hour: 表示小时,0~23
day: 表示日期,1~31
month:表示月份,1~12
week:表示星期,0~7,0和7代表星期日
command:要执行的命令,可以是系统命令,也可以使自己编写的脚本文件
以上各个字段,可以使用以下特殊字段:
星号(*):代表所有的值
逗号(,):可以用逗号隔开的值指定一个列表范围,例如:“1,2,3,4,5”
中杠(-):可以用证书之间的中杠表示一个整数范围,例如:“2-6”,表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两个小时执行一次,可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
三、crond进程
crond常常在后台作为守护进程运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
查看crontab服务状态
service crond status
手动启动crond服务:
service crond start
查看crond服务是否已设置为开启启动,执行命令:
ntsysv
加入开机自动启动:
chkconfig -level 35 crond on
四、cron.deny\ cron.allow文件
系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。
/etc/cron.deny 表示不能使用crontab 命令的用户
/etc/cron.allow 表示能使用crontab的用户。
默认情况下,cron.allow文件不存在。如果两个文件同时存在,那么/etc/cron.allow 优先。如果两个文件都不存在,那么只有超级用户可以安排作业。
五、crontab语法
1:查看当前用户的定时任务
[oracle@localhost ~]$ crontab -l
* * * * * /home/oracle/test.sh >/dev/null 2>&1
2:编辑当前用户的定时任务
可以在编辑状态修改、删除、新增一些定时任务。注释一般用#
[oracle@localhost ~]$ crontab -e
3:删除当前用户的定时任务
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
注意事项:
配置定时任务时,需要注意两个问题:
1: 在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。所以,你需要在shell脚本中添加必要的环境变量的设置
2: 尽量所有的文件都采用完全路径方式,避免使用相对路径。