crontab及其相关文件

2011年11月11日 发表评论 阅读评论

用户的crontab设定:  crontab命令

这个循环的例行性命令其实就是cron服务(crond).输入crontab指令之后,会将命令写入/var/spool/cron目录中该操作不需要重启服务,即可生效。

crontab指令的语法:

#crontab [-u user][-l | -e | -r]

说明:

-u user:  这个指令只有root能输入,查看或编译其他用户的crontab内容

-l:       列出crontab的内容

-e:       编辑crontab的内容

-r:       删除crontab的内容

编辑crontab的语法格式:

* * * * * command

说明(从左至右依次说明)

*:   表示分钟(0-59),*代表每分钟,*/5代表每5分钟,1,3,5,10代表第1,3,5,10分钟的时候.

*:   表示小时(0-23)

*:   表示日期(1-31)

*:   表示月份(1-12)

*:   表示周(0-6)

command: 表示要执行的命令

 系统的crontab设定:  /etc/crontab

编辑系统的crontab只要直接编辑/etc/crontab文件就可以.

注:由于crontab是读取到内存中,所以在修改完/etc/crontab之后可能不会马上执行,这时需要重新启动crond服务. /etc/rc.d/init.d/crond restart

解析/etc/crontab文件的内容

[root@mail bin]# 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

 大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。
[root@mail bin]#
MAILTO=root:  即当/etc/crontab文件中的例行性命令发生错误时,会将错误信息或屏幕显示的信息传给root用户,因为root无法在客户端收信,因此,这里通常被改成自己的账号,好及时了解到系统的状况.

01 * * * * root run-parts /etc/cron.hourly: 这一行说的就是在每个小时的第一分钟,系统会以root层级的用户到/etc/cron.hourly目录下执行所有可以执行的文件.root 代表执行的层级为root身份.run-parts表示后面接的/etc/hour.daily是一个目录内的所有可以执行的文件.

 注: 基本上,/etc/crontab支持两种指令的方式,一种是直接以指令形式输入,一种则是以目录形式输入.

指令形式:

01 * * * * test mail -s test test< /home/test/test.txt

用户是test,且每小时执行一次指令mail...

也可以如下所示

*/5 * * * * root /usr/local/mrtg-2/bin/mrtg /usr/local/apache/htdocs/mrtg/net/mrtg.cfg

目录形式:

*/5 * * * * root run-parts /etc/runcron

建立一个/etc/runcron的目录,将每隔5分钟执行一次的可执行文件都写到该目录下,就可以让系统每时每5分钟执行一次该目录下所有的所有可执行文件

 Crontab的权限控制文件

/etc/cron.allow /etc/cron.deny   都不存在仅有root可以按照新的crontab
仅有/etc/cron.deny 存在 除了cron.deny中的用户,其他用户都可以建立crontab
仅有/etc/cron.allow 存在 仅允许cron.allow中的用户建立crontab
如果两个文件都存在 忽略 cron.deny

crontab命令不执行的原因:

crontab虽然用起来非常的方便,但其对脚本的书写要求也是非常苛刻的。很多脚本在bash中正常可以./或sh 执行,

而在crontab里执行出错。具体可以注意以下几点:

1、如mv、ls、passwd等诸如此类的命令,最好写为全路径。如/bin/mv格式。

2、文件里涉及用到的一些文件,也最好能在脚本开头定义下路径或写全路径。

对于一些不想写全路径或定义路径时,也要在下面的路句执行上加上一名cd 绝对路径目录。

示例:

这样用户就可以往crontab 文件中写入无限多的行以完成无限多的命令。命令域中可以写入所有可以在命令行写入的命令和符号,其他所有时间域都支持列举,也就是域中可以写入很多的时间 值,只要满足这些时间值中的任何一个都执行命令,每两个时间值中间使用逗号分隔。

除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。几个例子:

每天早上6点

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时

0 */2 * * * echo "Have a break now." >> /tmp/test.txt

晚上11点到早上8点之间每两个小时,早上八点

0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 command line




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: Linux/unix/mac 标签:
  1. 2011年12月3日11:45 | #1

    You got to push it-this esenstial info that is!