|
刚开始的时候对于后台进程,守护进程,以及cron进程的关系根本没弄清楚,现在了解了。就像我前面的文字里面写的:
后台进程:运行时无须用户输入的程序。可以在诸如 UNIX/Linux 之类的多任务操作系统上运行多个后台进程,而用户则与前台进程交互(例如,数据输入)。有些后台进程(例如守护程序)从来都不需要用户输入。其它一些进程 只是在用户忙于目前运行于前台的程序时才临时处于后台。
守护进程是一种后台进程。Cron进程是众多守护进程中的一种,看看Cron这个单词在字典里面的解释:
cron
= chronograph,【unix】(时钟)守护程序,(精密)计时程序
从字面意思就可以大概了解,它是一种和时间有关系的程序,简单的说,cron守护进程执行预定的命令,他会在预定的时间执行预订的命令或者脚本。
好,知道了他是干嘛的,现在就来了解他是怎么工作的。
“以一定的时间间隔运行作业需要使用 cron 进行管理,它由crond守护进程和一组表(描述执行哪些操作和采用什么样的频率)组成。这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。用户使用crontab命令管理 crontab。crond守护进程常常是在系统启动时由 init 进程启动的。”
注:上文摘自网络,实际上,在我的机器上,安装的是Vixie-Cron,所以我的电脑上不是crond,而是Vixie-Cron
关于crontab这个表的内容,以及如何写这个表,前面一篇文字已经有讲过,不再赘述。有一点新的内容需要补充,时间后面的字段,也就是第六个字 段:第 6 个字段包含前 5 个字段之后的所有内容,它是要传递给shell 的字符串。百分号(%)将转换为空行,所以如果要使用 % 或其他任何特殊字符,就要在前面加上反斜线()。第一个 % 之前的一行传递给 shell,这个 % 之后的所有行都作为标准输入传递。
一般来说,只有root用户才有权限去运行cron进程,若管理员允许或者禁止其他用户使用,则应编辑/etc/下面的c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。
每一个用户都可以有自己的c r o n t a b文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过c r o n . d e n y和c r o n . a l l o w这两个文件来禁止或允许用户拥有自己的c r o n t a b文件。
若没有自己的crontab文件,则第一次使用时可能应该手动创建一个文件,然后使用$ crontab <你的crontab文件名> 来提交你的crontab,之后就可以用crontab命令来修改,删除,列出你的crontab的内容了。关于如何此命令如何使用也参见上一篇关于 cron的博客日志。
注:crontab这个词的意思,本身他是一个表,里面记录预订时间预定执行的命令或脚本;第二,他也是个命令,用户使用 crontab 命令管理 crontab这个表。
cron在运行的时候要查看crontab来进行作业的调度。这里上文有几句话非常重要,解释了我碰到过的问题:这个守护进程每分钟唤醒一次,并通过检查 crontab 判断需要做什么。每分钟检查一次crontab,然后做一次运行命令或脚本的安排。
用户自己创建的crontab在哪儿呢?在这里:/var/spool/cron/crontabs 。其实,cron检查的crontab不只包括用户自己创建的crontab,还有系统的crontab,包括/etc/crontab和/etc /cron.d 目录中的文件(/etc/cron.d 下有可能会存在at调度的作业)。其中/etc/crontab有必要解释一下,一个典型的例子:
1. /etc/crontab
2.
3. 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 中,在第五个时间字段(星期)和命令之间增加了一个字段。这个字段指定哪个用户应该运行这个命令,一般情况下是根用户。然后解释下后面的命令:在/etc /下会有cron.hourly,cron.daily,cron.weekly,cron.monthly这四个文件夹,他们下面分别放着一些文件,用 来指定每小时,每天,每个星期,每个月要执行的操作,命令run-parts的意思是执行下面目录里面的程序和脚本,例如run-parts /etc/cron.hourly意思就是执行/etc/cron.hourly文件夹下的程序以及脚本。
在这个示例中,真正的工作由 run-parts 命令执行,它运行 /etc/cron.hourly、/etc/cron.daily 等目录中的脚本;/etc/crontab 仅仅控制执行作业的时间。注意,这里的所有命令都作为根用户运行。还要注意,crontab 可以包含 shell 变量赋值,这些赋值会在运行命令之前执行。
输出
您可能想知道对来自命令的输出会如何处理。为使用 cron 而设计的大多数命令会使用 syslog 在日志中记录输出(参见教程 “LPI 102 考试准备:管理任务” 中的讨论)。但是,定向到 stdout 的输出会通过电子邮件发送给用户。
对上面这段还不是很明白。但是我们可以在系统日志/var/log/messages里面看到你cron调度的命令或者脚本有么有执行。然后,目前 测试,如果是GUI的应用程序,似乎用cron不能良好的运行,所谓不能良好的运行,举例来说:不能使用mp3blaster播放音乐,因为他需要使用 ncurses去绘制他的界面;在比如,使用mplayer去播放视频,我下午的测试,只能播放出音乐,不能显示出视频。
在gentoo里面用eix -s cron看了下,cron这种程序还是有很多种的,不同的人开发的不同特色的cron程序。比如dcron,fcron等等,详细就自己去看下description了。 |
|