Chinaunix首页 | 论坛 | 博客
  • 博客访问: 412447
  • 博文数量: 65
  • 博客积分: 1491
  • 博客等级: 上尉
  • 技术积分: 702
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-30 15:57
文章分类
文章存档

2011年(6)

2010年(12)

2009年(47)

我的朋友

分类: LINUX

2009-05-30 16:38:24

最近的工作内容涉及到一些定时执行的job,因此研究了下cron工具的代码(crond.c)。crond的主程序很简单,如下:
------------------------------------
for (;;) {
sleep((sleep_time + 1) - (short) (time(NULL) % sleep_time));//每分钟循环一次;
...
CheckUpdates();//主程序根据cron.update文件的内容更新自身的job数据库;
...
TestJobs(t1, t2);//检查哪些具体的job需要在此时执行并做标记;
...
RunJobs();//执行具体的job;
...
}
------------------------------------
  重点是 CheckUpdates() 这个函数,它每次先检查工作目录下有无cron.update文件,如果没有,该函数跳出,如果有,则读入其内容并继续执行。
  cron.update文件只简单保存一个任务文件的名字(每个任务文件对应一个Linux用户名,保存着该用户的所有定时执行的job条目),比如:root或user1 。当CheckUpdates() 从cron.update文件中读入root或user1时,就会自动找到root或user1这个文件,并重新读入其中记录的job条目.最后,CheckUpdates() 函数会自动删除cron.update文件。
  
  因此,如果根用户root给自己的root文件(root账户在启用cron服务时对应的job文件)加了一条任务,就应该紧接着再生成cron.update文件,并且只记录"root"这个名字,然后crond主程序会在下一分钟开始时自动检测到并及时更新。当然,cron作为linux的一个程序套件,它有crontab这个专门的配置工具供用户使用。
<--文章完-->
阅读(1042) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~