crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。
crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序。
[root@localhost ~]# more /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
[oracle@localhost ~]$ crontab -l
* * * * * /home/oracle/test.sh >/dev/null 2>&1
可以在编辑状态修改、删除、新增一些定时任务。注释一般用#
[oracle@localhost ~]$ crontab -e
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root
一般crontab文件里面的定时任务格式如下所示:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/u01/rfc
# For details see man 4 crontabs
# 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
#>输出内容不打印到屏幕上,而是输出到*.txt文件中
#追加而不是覆盖,可以用 >>代替>
*/5 * * * * /u01/rfc/test.sh > /u01/rfc/logs/test.txt 2>&1
解析crontab 文件中每个条目中各个域的意义和格式:
第一列 分钟: 1——59
第二列 小时: 0——23
第三列 日 : 1——31
第四列 月 : 1——12
第五列 星期: 星期0——6(0表示周天,1表示周一。。。)
第六列 要运行的任务命令(0表示键盘输入;1表示标准输出;2表示错误输出)默认值为1
前面五列有四种写法:
第六列:2>&1 是将错误输出重定向到标准输出。 然后将标准输入重定向到文件test.txt。&1 表示的是文件描述1,表示标准输出,如果这里少了&就成了数字1,就表示重定向到文件1。
1: 在SHELL中设置了必要的环境变量;例如一个shell脚本手工执行OK,但是配置成后台作业执行时,获取不到ORACLE的环境变量,这是因为crontab环境变量问题,Crontab的环境默认情况下并不包含系统中当前用户的环境。
2: 尽量所有的文件都采用完全路径方式,避免使用相对路径。