linux cron

来源:互联网 发布:python最小化 编辑:程序博客网 时间:2024/05/29 17:52

1.cron介绍

cron就是计划任务,通过crond服务定时执行任务。例如:定时运行脚本来监控系统或定时运行某些程序等。

 

[root@localhost ~]#ps -ef|grep crond

root      2105     1 0 Jul28 ?        00:00:02 crond

root     29117  2105  0 14:57?        00:00:00 crond

root     29123 28816  0 14:57pts/1    00:00:00 grep crond

cron有两个配置文件,一个是一个全局配置文件(/etc/crontab),是针对系统任务的,一组是crontab命令生成的配置文件(/var/spool/cron下的文件),是针对某个用户的。

2.系统任务

2.1系统配置文件

 

查看/etc/crontab,得到以下信息:

 

SHELL=/bin/bash

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

MAILTO=root

HOME=/

# run-parts

01 * * * * rootrun-parts /etc/cron.hourly

02 4 * * * rootrun-parts /etc/cron.daily

22 4 * * 0 rootrun-parts /etc/cron.weekly

42 4 1 * * rootrun-parts /etc/cron.monthly

分析一下这个文件:

 

/* 前四行是用来配置 cron任务运行环境的变量 */

 

/* 系统要使用哪个 shell 环境*/

SHELL=/bin/bash

 

/* 定义用来执行命令的路径 */

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

 

/* 任务的输出被邮寄给 MAILTO变量定义的用户名(/var/spool/mail),如果为空,则不邮寄 */

MAILTO=root

 

/* 设置在执行命令或脚本时使用的主目录*/

HOME=/

 

/*下面是关键,指定什么时间运行什么目录下的任务,run-parts命令是运行指定目录下的每个脚本 */

# run-parts

 

/*每天每小时1分钟后运行/etc/cron.hourly目录中的每个脚本文件 */

01 * * * * rootrun-parts /etc/cron.hourly

 

/*每天凌晨4点2分运行/etc/cron.daily目录中的每个脚本文件 */

02 4 * * * rootrun-parts /etc/cron.daily

 

/*每个星期天凌晨4点22分运行/etc/cron.weekly目录中的每个脚本文件 */

22 4 * * 0 rootrun-parts /etc/cron.weekly

 

/*每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 */

42 4 1 * * rootrun-parts /etc/cron.monthly

备注:具体参见后面的cron语法。

注意:如果去掉“run-parts”,后面就可以写要运行的某个脚本名或者命令了。

2.2如何使用

 

1、直接修改/etc/crontab,直接在里面添加运行的脚本名称

2、不动/etc/crontab,直接将脚本拷贝到相应得目录中(/etc/cron.hourly等)中。

 

注意:

 

1)、脚本的执行权限。通过 chmod755 <脚本名> 解决。

2)、注意环境变量的设置,容易出现“commandnot found”,通过添加绝对路径,以及修改Path解决。

  环境设置的查询命令为export

3.用户任务

 

通过crontab命令创建、删除、编辑自己的用户任务。

 

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件(如果该文件已存在,则会覆盖。),此用户的cron信息都记录在这个文件中。

 

cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。

 

注意:该文件可以通过vi直接编辑。(已试过)

 

3.1crontab命令

 

语法:

 

crontab [-u user]file

crontab [-u user] [-l| -r | -e][-i]

参数与说明:

 

crontab -u//设定某个用户的cron服务

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

crontab -r//删除没个用户的cron服务

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

示例:

/* root查看自己的cron设置 */

crontab -l

 

/* root想删除fred的cron设置*/

crontab -u fred -r

编辑cron服务时,编辑的内容有一些格式和约定,输入:

crontab -u root -e

进入vi编辑模式,编辑的内容一定要符合下面的格式:

*/1 * * * * ls>> /tmp/ls.txt

备注:具体参见cron语法!

 

3.2权限安全问题

 

根 用户以外的用户可以使用 crontab工具来配置 cron 任务。所有用户定义的 crontab 都被保存在 /var/spool/cron目录中,并使用创建它们的用户身份来执行。要以某用户身份创建一个 crontab 项目,登录为该用户,然后键入 crontab -e 命令,使用由 VISUAL或 EDITOR 环境变量指定的编辑器来编辑该用户的 crontab。该文件使用的格式和 /etc/crontab 相同。当对 crontab所做的改变被保存后,该 crontab 文件就会根据该用户名被保存,并写入文件 /var/spool/cron/username 中。

cron 守护进程每分钟都检查/etc/crontab 文件、etc/cron.d/ 目录、以及 /var/spool/cron目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

/etc/cron.allow 和/etc/cron.deny 文件被用来限制对 cron的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

无论使用控制文件中的规定如何,根用户都总是可以使用cron。

如果 cron.allow文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。

如果 cron.allow文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron。

被禁止的用户在使用crontab命令时,会有以下提示:

 

[naotang@localhostroot]$ crontab -e

You (naotang) are notallowed to use this program (crontab)

See crontab(1) formore information

 

4.cron语法

 

一个crontab文件包含多个计划任务,计划任务之间由换行字符分开。每个任务设置 包括6个字段,它们被空格或制表符以以下格式分开:

 

minute  hour  day_of_month  month  weekday command

字段解释:

 

minute (0-59)

hour (0-23)

day_of_month (1-31)

month (1-12)

weekday (0-6)//0代表星期天

command shell 命令

除了数字还有几个特殊的符号就是“*”、“/”、“-”、“,”

其中 * 代表所有的取值范围内的数字; /代表每的意思,“*/2”表示每2个单位; - 代表从某个数字到某个数字; , 分开几个离散的数字。

示例:

 

每天早上6点

0 6 * * * echo"Good morning,sir" >> /tmp/test.txt//注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时

0 */2 * * * echo"Have a break now." >> /tmp/test.txt

晚上11点到早上8点之间每两个小时,早上八点

023-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 commandline

/* 定时运行SQL语句的例子 */

* ** * *  /opt/lampp/bin/mysql -h localhost -u rootDataBaseName  < /var/spool/cron/crontabs/ratingRanking.sql

 

5.cron安装启动

要使用 cron 服务,你必须安装了vixie-cron RPM 软件包,而且必须在运行 crond 服务。要判定该软件包是否已安装,使用 rpm -q vixie-cron命令。要判定该服务是否在运行,使用 /sbin/service crond status 命令。

cron是linux的内置服务,可以用以下的方法启动、关闭这个服务:

 

/sbin/service crondstart //启动服务

/sbin/service crondstop //关闭服务

/sbin/service crondrestart //重启服务

/sbin/service crondreload //重新载入配置

6.缺点

 

cron任务的缺点是计划要经常运行,假如我们只是想让特定任务运行一次呢?那么,这时候就要用到at命令,将在另文中介绍。