|
|
第 1 帖 | |
|
|
标题: [原创]简单、严谨、安全 —— Dcron 简介 由于论坛排版效果不理想,而且我也只在我的个人空间对文章进行后继更新,所以建议直接到我的空间查看此文:
《简单、严谨、安全 —— Dcron 简介》 http://lamp.linux.gov.cn/Linux/dcron.html 计划任务 在 UNIX 操作系统中,通常都有一个 crond 守护进程来定期执行设定好的计划任务,它能给服务器管理带来许多便利,同时可以大大节省管理员的时间和精力。比如,管理员希望每天凌晨 3:00 对数据库进行一次备份,有了 crond 的帮助,管理员就不必每天在睡得最香的时候起床了,crond 能够按照配置文件的指引自动完成这个任务。 在GNU的世界里,最不缺乏的就是选择,同样,这个 crond 也有多种不同的实现,常见的有:fcron 、dcron 、vixie-cron 三种。本文将介绍其中的 dcron 实现,它的特点就是“简单、严谨、安全”。 Dcron Dcron 是 Dillon 的作品,其主页是:http://apollo.backplane.com/FreeSrc/ Dcron 将所有任务都强制交给 /bin/sh 执行,也就是使用"/bin/sh -c"来运行任务。Dcron 不允许你在配置文件中指定环境变量或使用其它高级特性,这些事情最好放到脚本中去做。 Dcron 启动后首先扫描普通用户配置目录,寻找以/etc/passwd中用户名命名的文件,并将其作为该用户的配置文件。然后扫描root用户配置目录,并将其下所有文件都作为root用户的配置文件[笔者本人建议不要使用root配置目录,而是在普通用户配置目录中放置一个"root"文件,效果完全相同]。 [注意]配置目录下所有文件名含有句点(.)的文件和无法匹配用户名的文件都会被忽略。 Dcron 在运行时会每分钟检查一次配置文件目录中的"cron.update"文件。你可以将已经被修改或删除的配置文件的名字(也就是用户名)添加到 "cron.update"文件中(一行一个),这样就可以通知 Dcron 配置文件已经发生变化。不过,即使没有"cron.update"文件,Dcron 也会每小时自动重新扫描一次配置目录。 Dcron 有许多内置的限制以防止其被误用。其中最重要的是:每个配置文件最大256行规则。每行规则最长1020字符。 Dcron 并不使用 Sysklogd 记录日志,一般的方法是直接将命令的结果重定向到日志文件。 Dcron 的执行细节:它必须至少运行一个任务。它首先创建两个进程自己拥有的临时文件 O_EXCL 和 O_APPEND 存储所有输出,然后 fork() 出子进程并将其身份切换到该任务的属主,然后使用 exec 函数执行"/bin/sh -c"来运行任务,但是 O_EXCL 和 O_APPEND 始终由守护进程所有,以防止被用户恶意修改。任务完成后 crond 会校验没有安全防护的 mail 文件,如果它被新增了内容,那么就以任务属主的身份使用 sendmail 将修改过的 mail 文件发送给其属主。crond 不会在任务执行期间保持打开文件描述符,因为这样做可能会导致文件描述符被耗尽。crond 总是在每一分钟的开始时刻检查当前是否有事情可做,这种检查的效率很高,几乎不消耗任何 CPU 资源。 如果轮到某一条命令执行的时候,先前启动的命令尚未执行结束,那么将跳过此次执行。比如,如果设定每分钟执行一次"sleep 70",实际效果将是每两分钟执行一次。如果你不喜欢这样,可以在命令之后加上"&"转入后台执行,这样就不会受此影响了。 编译与安装 Dcron 是一个标准的 ANSI C 程序,理论上可以使用任何符合标准的编译器进行编译(推荐使用 GCC)。但事实上,源代码中切换用户身份的操作是特定于Linux的方式,所以,只建议在Linux上编译和安装。 编译之前你需要详细阅读 Makefile 和 defs.h 文件,并根据你的需要进行修改。比如作者本人经常进行这样的修改: 代码:
然后使用下面的命令进行编译和安装: 代码:
crond 通常在系统启动的时候由 /etc/rc.local 启动。在启动脚本中通常使用"-l8"指定日志等级。由于 Dcron 并不使用 Sysklogd 记录日志,所以一般直接将命令的结果重定向到日志文件。比如: 代码:
语法 代码:
-l<日志等级> 设置日志等级(0-8),等级越低日志越详细,默认为"8"。 -d<调试等级> 设置调试等级,默认为"0"。使用这个选项会同时将日志等级设为"0",并导致 crond 作为前台进程运行。 -f 在前台运行 -b 在后台运行。这是默认值,除非你使用了 -d 选项。 -c 目录 指定配置文件目录,默认值是 /var/spool/cron/crontabs ,可以在 defs.h 文件中修改这个默认值[我一般修改成 /etc/crontabs]。 -s 目录 指定root用户配置文件目录,默认值是 /etc/cron.d ,可以在 defs.h 文件中修改这个默认值[我一般修改成 /etc/crontabs]。 配置文件语法 配置文件的格式与 vixie cron 类似,但是缺少一些高级特性,比如不允许在配置文件中使用环境变量。 空白行以及以"#"开头的行将被忽略。 配置文件中的每一行都需要指定5个时间字段+1个命令字段,也就是: 代码:
月份和星期除了数字,还可以使用字符串缩写,具体如下: 1-12月:jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec 周日-周六:sun,mon,tue,wed,thu,fri,sat 如果你同时指定了每周中的某一天和每月中的某一天,那么两者同时有效,也就是这个任务会在每周的这一天执行,同时也在每月的这一天执行。 下面是几个例子: 代码:
代码:
通常将命令的结果重定向到一个日志文件,否则默认将输出到 stdout 或 stderr ,并且同时使用sendmail发送到任务的属主。如果你希望为某些特别的用户(比如 UUCP)利用这个sendmail机制,最好为这个用户设置一个别名以将邮件重定向到 root 或 postmaster 之类的用户。
__________________
@@ |
|
|
|
|
|
|
|
第 2 帖 | |
|
|
这个都是比较常用的工具。鼓励一下
![]()
__________________
新手提问前请先看下面这个链接,谢谢大家配合: bbs.linuxsir.org/showthread.php?t=112318 我的博客http://blog.chinaunix.net/u/33031/ Intel Core 2 Due E6550/P5K SE/2x1G/NVIDIA 6200LE/WD1600AAJS/NEC LCD195VX/2.6.31-gentoo |
|
|
|
|
|
|
|
第 3 帖 | |
|
|
哈哈,正在找,一找正着!
|
|
|
|
|
|