用户的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

用户是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