Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80672
  • 博文数量: 30
  • 博客积分: 113
  • 博客等级: 民兵
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-02 00:37
文章分类
文章存档

2012年(20)

2011年(10)

我的朋友

分类:

2012-02-22 21:08:16

原文地址:cron服务学习 作者:sunjiangang-ok

cron服务学习

1.       crontab介绍

crontab命令的功能是在一定的时间间隔调度一些命令的执行。在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab

crontab主要有4个参数:

-l     #列出某个用户的cron服务的详细内容

-u    #设定某个用户的cron服务,一般是root用户使用此选项

-r     #删除某个用户的cron服务

-e    #编辑某个用户的cron服务

2.       cron介绍

cron是一个Linux下的定时执行工具,可以在无需人工干预的情况下运行作业。croncrond守护进程和一组表(crontab文件)组成。由于cron Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start     //启动服务

/sbin/service crond stop     //关闭服务

/sbin/service crond restart   //重启服务

/sbin/service crond reload   //重新载入配置

你也可以将这个服务在系统启动的时候自动启动:

/etc/rc.d/rc.local这个脚本的末尾加上:

/sbin/service crond start

cron服务提供了crontab命令来设定cron服务的。

3.    crond介绍

crondcrontab的一个守护进程。d代表daemon,守护进程是生存期比较长的一个进程,一般linux下的一个进程都是和一个终端中运行着,终端一关闭,进程也就退出,但是守护进程一般是在系统装入时启动,在系统关闭时结束,在系统的后台运行着。

4.    cron工作原理

crond守护进程是在系统启动时由init进程启动的,受init进程的监视,如果它不存在了,会被init进程重新启动。这个守护进程每分钟唤醒一次,并通过检查crontab文件判断需要做什么。

每个用户有一个以用户名命名的crontab文件,存放在/var/spool/cron/crontabs目录里。若管理员允许或者禁止其他用户拥有 crontab文件,则应编辑/etc/下面的cron.denycron.allow这两个文件来禁止或允许用户拥有自己的crontab文件。每一 个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。

用户使用crontab命令(注意crontab可以指文件,也是一个命令)管理自己的crontab文件。

1) 更新crontab文件——crontab filename

用来更新当前用户的crontab文件。注意:只是将filename指定的文件中的crontab条目写入用户的crontab文件(以用户名命名)中并 清空crontab文件原来的条目,并不是将filename指定的文件复制/var/spool/cron/crontabs目录;

2) 列出crontab文件——crontab -l

列出当前用户的crontab文件的crontab条目;

3) 编辑crontab文件——crontab –e

编辑当前用户的crontab文件;

4) 删除crontab文件——crontab –d

删除当前用户的crontab文件。

5.    crontab命令的时间编辑格式举例

a)      每天早上910执行:10 9 * * *

b)     每两小时分执行一次:10 */2 * * *

c)      晚上11点到早上9点,每两个小时执行一次:0 23-9/2 * * *

6.    crontab不执行

crontab有时候会因为环境变量的问题不能执行命令,这个要执行的命令被送入sh去执行,这个shell只有USERHOMESHELL这三个环境变量,因此在这里填写命令的时候,最好写命令的绝对路径。另外,每条JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1

7.    crond的配置文件/etc/crontab

这个文件当中主要存放了系统运行的一些调度程序。


说明:

SHEL=/bin/bash            #基于什么shell来运行

PATH=/sbin:/bin:/usr/sbin:/usr/bin

#指定目录中有文件命令时候,不需要指明全路径

MAILTO=root         #使用cron命令时,通过邮件的方式通知root用户

HOME=/             #/etc/crontab相关的主目录为根目录

上面四行主要任务运行时一些环境变量的设置,下面的内容就是任务运行的时间和任务了:

命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本。

例如:

# run-parts

* * * * * root ls /proc >> /tmp/proc

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命令是指出运行指定目录下的某个脚本。

注意:时间后面是有一个用户的名字的,如果没有这个用户名字,那么这个命令或者脚本是不会被执行的,之前我就犯过这样的错误。

8.    用户自己的cron

每一个用户可以设置自己的cron服务,只要这个用户没有在/etc/cron.deny表中就可,他就可以使用crontab –e命令来编辑自己的cron文件。

用户自己编辑的cron服务,是在/var/spool/cron/User_name文件中记录滴。。。

9.    cron的访问控制

默认情况下,所有用户都能访问cron,要对cron进行访问控制,是通过/etc/cron.allow文件和/etc/cron.deny文件进行的。如果这两个文件都不存在的时候,表示所有的用户都可以访问cron工具;cron.allow文件的优先权高于cron.deny文件,也就是说,如果同时存在这两个文件,那么cron.deny文件就失效了,只有cron.allow文件起作用。

cron.allowcron.deny就是用户名的列表,每行一个用户名。

10.  /etc/crontab文件与/etc/cron.d目录

如果某cron任务需要根据调度来执行,而不是每小时、每日、每周、或每月地执行,它可以被添加到/etc/cron.d目录中。该目录中的所有文件使用和/etc/crontab中一样的语法。

这里的“根据调度来执行”时什么意思啊?我还是不能理解,经过测试,我得出的结论是,这个目录下的文件和crontab文件的执行效果是一样的╮(╯▽╰)╭。

11.  使用at命令运行一次

使用cron的缺点是任务要经常运行,如果我们要让任务运行一次的时候,可以使用at命令。

at now + 1 minutes      #1分钟后执行at任务

atq         #查询at的任务

atrm No.    #删除指定编号的at任务

 

 

参考资料:

(1)    crond

(2)    crontab命令的使用及自我体会:

 

阅读(968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~