之前听说过这个命令,但没有研究过;最近因为业务需要,要做系统自动定时执行脚本任务,于是进行了以下测试:
1.crontab基础知识
[root@rac2 sbin]# service crond start ---查看crontab服务是否启动 Starting crond: cannot start crond: crond is already runnin[FAILED] [root@rac2 sbin]# ps -ef|grep crond ---查看crontab进程 root 2959 1 0 21:47 ? 00:00:00 crond root 3509 3457 0 21:51 pts/1 00:00:00 grep crond [root@rac2 sbin]# crontab --help ---查看使用帮助 crontab: invalid option -- - crontab: usage error: unrecognized option usage: crontab [-u user] file crontab [-u user] [ -e | -l | -r ] (default operation is replace, per 1003.2) -e (edit user's crontab) -l (list user's crontab) -r (delete user's crontab) -i (prompt before deleting user's crontab) -s (selinux context) [root@rac2 sbin]# crontab -u root -l ---查看root用户当前是否有自动执行计划 no crontab for root [root@rac2 sbin]# crontab -l no crontab for root
2.编写一个自己的自动定时执行计划
[root@rac2 sbin]# crontab -e no crontab for root - using an empty one crontab: no changes made to crontab
看别人这样就可以进入vi界面编写计划,我编写后,但提示 no changes made to crontab。
[root@rac2 sbin]# crontab -l no crontab for root
查看一下,依然还是没有。应该是编辑失败了,不知道为什么?
突然想到,可以这样试试:
[root@rac2 sbin]# crontab -u root -e no crontab for root - using an empty one crontab: installing new crontab
在弹出的vi界面 编写了:* */1 * * * echo "Have a good dream" >> /tmp/test.txt
-------意思是每各一分钟,向 /tmp/test.txt 文件里面插入一条“Have a good dream” 信息。
-------注:/tmp/test.txt 这个test.txt 是会自动生成的。
这次提示:crontab: installing new crontab,应该是ok了。
[root@rac2 sbin]# crontab -l * */1 * * * echo "Have a good dream" >> /tmp/test.txt [root@rac2 sbin]#
自动定时脚本编辑成功了。
检查一下/tmp/test.txt,执行结果也正确。
[root@rac2 ~]# cd /tmp [root@rac2 tmp]# ls gconfd-root keyring-NcCgMA keyring-YCitrn virtual-root.2D8HSv virtual-root.i8tzq0 keyring-fbdP86 keyring-UJUfuW mapping-root virtual-root.DKtizo virtual-root.ppMHJx keyring-jq9tuZ keyring-WoIlNb test.txt virtual-root.GQc6wM virtual-root.vDHQoi [root@rac2 tmp]# tail -f test.txt Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream Have a good dream
3.crontab语法介绍
/etc/crontab文件语法如下:
Minute Hour Day Month Dayofweek command
分钟 小时 天 月 天每星期 命令
每个字段代表的含义如下:
• Minute 每个小时的第几分钟执行该任务
• Hour 每天的第几个小时执行该任务
• Day 每月的第几天执行该任务
• Month 每年的第几个月执行该任务
• DayOfWeek 每周的第几天执行该任务
• Command 指定要执行的程序
在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
同时,cron支持类似正则表达式的书写,支持如下几个特殊符号定义:
• "*"代表取值范围内的数字,
• "/"代表"每",
• "-"代表从某个数字到某个数字,
• ","分开几个离散的数字
例子:
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
17 5 * * 0 /etc/cleanup > /dev/null 每周星期日5:17清除系统上的某些日志文件
0 2 * 1 * rm -rf /usr/userbk*.log 每月1日2:00删除/usr/userbk下的日志文件