计划任务之二(crontab命令)
时间:2010-09-26 来源:fzguon
循环执行的例行性命令,则是由cron(crond)系统服务来控制的。由于系统本身就有相当多的例行性工作,因此,这个系统服务是默认启动的。另外,由于用户自己也可以进行例行性工作任务分配,所以,Linux也提供用户控制例行性工作的命令(crontab)
1.crontab的工作
与at命令类似,可以限制使用crontab的用户账号。使用的限制数据有:/etc/cron.allow与/etc/cron.deny(和at命令的用法一样)。当用户使用crontab命令建立工作任务分配后,该项工作就会被记录到/var/spool/cron/中,而且是以账号来识别的。举例来说,guo使用crontab后,他的工作会记录到/var/spool/cron/guo里。但请注意,不要使用vi直接编辑该文件,因为可能使用由于语法输入错误,会导致无法执行cron。
注意:cron所执行的每一项工作都会记录到/var/log/cron这个登录文件中。
2.crontab的语法
[root@redflag ~] # crontab [-u user] [-l | -e | -r]
参数说明:
-u:只有root能下达的参数,即帮其他用户建立/删除crontab
-l:查看crontab的内容
-e:编辑crontab的内容
-r:删除crontab的内容
范例:
范例一:用guo在每天的12:00发信息给自己 [guo@redflag ~] # crontab -e # 此时会进入vi的编辑画面让您编辑。注意,每项工作都是一行 0 12 * * * mail guo –s “at 12:00” < /home/guo/test.txt 分时日月周 |========指令列==================| |
小时 | 日期 | 月份 | 周 | ||
范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 (0、7为星期天) |
另外,还有一些辅助的字符,如下表
特殊字符 | 代表意义 |
* | 表示任何时间都接受。举例来说,范例中,日、月、周都是*,表示“不论何月、何日星期几的12:00都执行后续命令” |
, | 表示分隔时段的意思。举例来说,如果要执行的工作在3:00与6:00,就会是:0 3,6 * * * command |
- | 表示一段实际范围内,如8点到12点间,每小时的20分都进行一项工作:20 8-12 * * * command |
/n | n代表数字,即“每隔n单位时间”,例如每5分钟进行一次,则是:*/5 * * * * command |
我们这里作几个例子!
例题一:假如你的朋友生日是5月2日,你想要在5月1日的23:59发一封信给他,这封信的内容已经写在 /home/guo/lover.txt 中了 [guo@redflag ~] # crontab -e 59 23 1 5 * mail kiki < /home/guo/lover.txt 例题二:假如你每隔五分钟要去执行一个名为 test.sh 的文件一次,则: [guo@redflag ~] # crontab -e 59 23 1 5 * mail kiki < /home/guo/lover.txt <==刚刚的那个指令还存在! */5 * * * * /home/guo/test.sh <==新加入的一个内容! 查询用户当前的crontab内容,我们可以这样: [guo@redflag ~] # crontab –l 59 23 1 5 * mail kiki < /home/guo/lover.txt */5 * * * * /home/guo/test.sh #注意,若仅想删除一项工作,必须要用crontab –e去编辑。 #如果想删除全部的工作,才使用crontab –r。 [guo@redflag ~] # crontab –r [guo@redflag ~] # crontab –l No crontab for guo |
3.系统的设置:/etc/crontab
系统的例行性任务只要用vi编辑/etc/crontab,而命令crontab -e 这个crontab其实是/usr/bin/crontab这个执行文件,但/etc/crontab可是一个“纯文字文件”,你可以root的身份编辑一下这个文件。在Linux中crontab会自动的帮我们每分钟重新读取一次/etc/crontab的例行工作事项,但是在你修改完/etc/crontab之后,可能并不会马上执行,这个时候请重新启动 crond 这个服务:/etc/rc.d/init.d/crond restart
来看看 /etc/crontab 这的文件的内容吧:
[root@redflag ~] # cat /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 <==每个月执行的工作
分 时 日 月 周 执行者 命令串
这个文件与刚执行crontab –e的内容很相似,但有几个地方不太一样。
a)MAILTO=root:当 /etc/crontab 这个文件中的例行性命令发生错误时,会将错误讯息或者是屏幕显示的讯息传给root。由于root并无法在客户端中收信,因此,我通常都将这个e-mail改成自己的账号,