Crontab配置及使用总结

Crontab配置及使用总结:

Crontab服务是Unix/Linux下的工业级服务,使用它可以设置周期性的任务执行,不需要常驻程序,这对程序的要求高度以及系统的性能开销起到积极作用。Crontab是Unix/Linux下主要的调度进程,不需人工干扰下作业,并且其可以允许用户提交、编辑及删除对应的任务作业,另外,每个用户都拥有一个Crontab文件保存调度信息,管理员可以通过编辑cron.deny及cron.allow两个文件禁止或许可用户拥有Contab。

 

·     工作原理

·     语法格式

·     配置说明

·     任务管理

·     定时任务

·     注意事项

 

1、工作原理

当使用 crontab 命令来创建工作任务后,该项工作就会被记录到/var/spool/cron/,而且是以帐号来作为判别的。例如,keysd 使用 crontab 后, 他的工作会被纪录到 /var/spool/cron/ keysd中,但请不要使用 vi 直接编辑该文件,因为可能由于输入语法错误,导致无法运行 cron 服务。另外,cron 运行的每一项工作都会被记录到 /var/log/cron 这个档中,所以,如果你的 Linux /unix不知道是否被植入木马时,也可以搜寻一下 /var/log/cron 这个登录档。

crond服务的最低侦测限制是分钟,所以,cron会每分钟去读取一次 /etc/crontab 与/var/spool/cron 里面的数据内容,只要你编辑 /etc/crontab 这个文件,并且将它储存之后,那么 cron 的配置就自动的运行了。

 

NOTE:

在 Linux/unix 下的 crontab 会自动的帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项,但是某些原因或者是其他的Unix/linux系统中,由于crontab 是读到内存当中的,所以在你修改完 /etc/crontab 之后,可能并不会马上运行, 这个时候请重新启动 crond 这个服务:/etc/init.d/crond restart。 

 

2、语法格式

A、格式说明

Crontab任务都是6个档位,它们的具体意义如下表:

分钟

小时

日期

月份

命令

0-59

0-23

1-31

1-12

0-7

command

 

B、特殊字符

字符名字

作用

*

代表任何时间都适合执行任务

,

代表分割时间段执行任务

-

代表一段时间内执行任务

/n

n为数字,代表每隔n分钟执行任务

 

NOTE:

每天早上4点:

0 4 * * *  command

每天3个小时:

0 */3 * * * command

晚上12点到早上4点间每3个小时:

0 24-4/2 * * * command

每个月的5号和每个礼拜的周一到周三早上4点:

0 4 5 * 1-3 command

12月24日早上8点

0 8 24 12 * command

 

3、配置说明

A、crontab位置

crontab文件一般在/etc下,需要结合实际系统版本来定:

#more  /etc/crontab

SHELL=/bin/bash

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

MAILTO=root

HOME=/

#run-parts

1 * * * * root run-parts /etc/cron.hourly

2 4 * * * root run-parts /etc/cron.daily

23 4 * * 0 root run-parts /etc/cron.weekly

24 4 1 * * root run-parts /etc/cron.monthly

 

B、独立的crontab文件

因为每个用户都会自动生成一个自己的crontab文件,一般位于/var/spool/cron下:

#cd  /var/spool/cron

#ls

mysql root

 

NOTE:

若使用了crontab  -r删除了对应的mysql ,那么目录下对应的文件mysql被删除

 

C、crontab配置文件

Crontab分为用户档和系统档两种设计,也就是使用crontab  -e(/usr/bin/crontab运行档)是针对使用的用户档cron的,而系统的例行任务,是需要配置/etc/crontab文件(需要使用root身份编辑哦),crontab内容如下:

cat /etc/crontab

 

# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.

 

SHELL=/bin/sh

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

 

# m h dom mon dow user  command

*    * * *   root   cd / && run-parts --report /etc/cron.hourly

6    * * *   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report/etc/cron.daily )

6    * * 7   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report/etc/cron.weekly )

6    1 * *   root   test -x /usr/sbin/anacron || ( cd / && run-parts --report/etc/cron.monthly )

 

NOTE:

/etc/crontab 里面预配置义出4项工作任务,分别是每小时、每天、每周及每个月分别进行一次的工作,但是在五个栏位后面接的并不是命令,而是一个新的栏位,就是『运行后面那串命令的身份』这与使用者的 crontab -e 不相同。由於使用者自己的 crontab 并不需要指定身份,但 /etc/crontab 里面当然要指定身份。

 

那么后面那串命令是什么呢?你可以使用『which run-parts』搜寻看看,那是一个 bash script,如果你直接进入/usr/bin/run-parts 去看,会发现这支命令会将后面接的『目录』内的所有文件捉出来运行!这也就是说『如果你想让系统每小时主动帮你运行某个命令,将该命令写成 script,并将该文件放置到 /etc/cron.hourly/ 目录下即可了。

 

现在你知道系统是如何进行他默认的一堆例行性工作排程了吗?如果你下达『 ll /etc/cron.daily 』就可以看到一堆文件, 那些文件就是系统提供的script ,而这堆 scripts 将会在每天的凌晨6:25 开始运行!

假设你现在要作一个目录,让系统可以每 2 分钟去运行这个目录下的所有可以运行的文件,你可以写下如下的这一行在/etc/crontab 中:

*/2 * * * * root run-parts /etc/cron.min

当然,/etc/cron.min 这个目录是需要存在的,如果我需要运行的是一个『程序』, 不需要用到一个目录呢?例如在侦测网络流量时,我们希望每五分钟侦测分析一次:

*/5 * * * * root /bin/mrtg /etc/mrtg/mrtg.cfg

创建例行性命令很简,如果你是系统管理员而且你的工作又是系统维护方面的例行任务时,直接修改 /etc/crontab 这个文件即可!

 

4、任务管理

A、语法格式

crontab  [-u  username] [-l][-e][-r]

 

NOTE:

-u:设定某个用户的cron服务,一般root用户使用它为其它用户指定cron;

-l:列出某个用户的cron服务列表;

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

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

 

B、任务管理

例如:

//root用户查看自己的cron服务:

sudo crontab  -u  root -l

//root用户删除heysd的cron服务:

sudo crontab  -u  heysd -r

//root编辑cron服务:

sudo crontab –u  root  -e

 

NOTE:

-e:编辑时进入vim/vi模式,输入的内容必须符合语法格式,例如:0 8 24 12 * command

 

5、用户限制

通过修改cron.allow和cron.deny两个文件,来允许出现在cron.allow中的用户拥有crontab权限,而未记录到cron.deny中的用户都可以使用crontab服务,他们的位置分别为:

/etc/cron.allow和/etc/cron.deny

 

6、定时任务

下面举个定时备份SVN数据的例子,具体如下:

A、sh脚本:

#!/bin/sh

 

now=`bin/date + %Y%m%d`

/bin/tar czvf "svn_backup_${now}.tar.gz" ./svnbk/  && rm –rf ./svnbk/*  && /bin/mv svn_backup_*.tar.gz  ./svnbk/

 

if[$?==0]

then

   result=" success"

else

   result=" failure"

fi

 

B、crontab -e

进入vim/vi模式,输入内容:

*/1 * * * *  ./crontab_svnbk.sh

 

7、注意事项

A、配置定时任务时,建议将文件访问都采用绝对路径方式,避免使用相对路径;

B、在shell中,需要添加必要的当前用户环境变量,防止脚本执行时找不到变量;

C、不要直接使用vi编辑/var/spool/cron/下的文件,可能因为输入语法错误,导致无法运行cron服务。

 

 

 

附上:

$man crontab | more

可以在线查看crontab手册

 

 

 

 

技术讨论群(新):

182437336

 

你可能感兴趣的:(Linux)