星期四, 六月 22, 2006

Debian定时任务管理(二)

Debian定时任务管理(二)

cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab 中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令,所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。

注意: 同其他用户一样, root 用户也可以有自己的 crontab。 它不同于 /etc/crontab (也就是系统 crontab)。由于有系统 crontab 的存在, 通常并不需要给 root 建立单独的用户 crontab。

看一下debian中默认的crontab文件(路径为/etc)的内容:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don’t have to run the `crontab’
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root run-parts ?report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.monthly

(1) 像大多数 配置文件一样,# 字符是注释。作为什么和为什么要执行,可以加一个注释来描述以便将来提醒您。注释不能跟命令一样在同一行上否则他们会被看成命令的一部分。注释应该另起一行。空行将会被忽略。

(2)首先应该定义环境变量。等号 (=) 字符用来定义任何环境变量,像这个例子用到了 SHELL和PATH 变量。如果 shell 行被忽略掉,cron 将会用默认值 sh。如果 PATH 变量被忽略, 那么就没有默认值并且需要指定文件绝对位置。

(3)这一行定义了七个字段。它们是 minute、 hour、mday、 month、wday、 who 和 command。 它们差不多已经说明了各自的用处。Minute 是命令要运行时的分钟,Hour 跟 minute 差不多,只是用小时来表示。Mday 是每个月的天。Month 跟 hour 还有 minute 都差不多,用月份来表示。wday 字段表示星期几。所有这些字段的值必须是数字并且用24小时制来表示。“who” 字段是特别的,并且只在 /etc/crontab 文件中存在。这个字段指定了命令应该以哪个用户的身份来运行。当一个用户添加了他(她)的 crontab 文件的时候,他们就会没有这个字段选项。最后,是 command 字段。这是最后的一个字段,所以自然就是它指定要运行的程序。

(4) 后面几行定义了上面所说的值。无论怎样,扩展到多行的命令应该用反斜线(“\”)来续行。

这是每个 crontab 文件的基本设置,虽然它们有一个不同。第六行我们指定的用户名只存在于系统 /etc/crontab 文件。这个字段在普通用户的 crontab 文件中应该被忽略。

应用实例:(一)

“每天用cron同步服务器时间”

方法1: 加入到 /etc/crontab

cat >> /etc/crontab < < "EOF"# 每天早上六点钟对系统时间进行同步并写入cmos

00 6 * * * root /usr/sbin/ntpdate time.nist.gov && /sbin/hwclock -w

EOF

2.因为/etc/crontab里有这么一项
25 6 * * * root test -x /usr/sbin/anacron || run-parts ?report /etc/cron.daily

所以,也可以加到/etc/cron.daily/目录

cat > /etc/cron.daily/ntpdate < < "EOF"#!/bin/sh

/usr/sbin/ntpdate time.nist.gov | logger -t NTP
/sbin/hwclock -w

EOF

chmod +x /etc/cron.daily/ntpdate

3.加到root用户的 crontabs

cat >/var/spool/cron/crontabs/root << “EOF”

# update time with ntp server
0 3,9,15,21 * * * /usr/sbin/ntpdate 192.43.244.18 | logger -t NTP
EOF



Technorati Tags: , , , , ,

没有评论: