迹忆博客
当前位置: 主页 > 学无止境 > 操作系统 > 文章

Linux命令crontab的使用——循环执行设定的命令

发布时间: 2016-05-03 作者: 迹忆 浏览次数:

相对于at是仅执行一次命令,本篇我们要说的crontab是循环执行设定的命令。

同样crontab的使用需要有crond服务的支持,该服务的启动方式如下

# service crond start
//或者
# /etc/init.d/crond start

crontab使用者权限配置

在系统中,为了安全起见,当然不能说是所有的用户都来使用crontab命令了。要知道这是很危险的一件事情。因此我们需要对用户的权限进行设置,通at一样,我们需要用两个文件来设定用户的权限。它们分别是 /etc/cron.allow 和 /etc/cron.deny。

/etc/cron.allow 将允许使用crontab的用户写入该文件,在这个文件中的用户有使用crontab的权限。当然不在这个文件中的用户就没有使用crontab的权限。

/etc/cron.deny 将不允许使用crontab的用户写入该文件,在这个文件中的用户没有使用crontab的权限。当然不在这个文件中的用户就有使用crontab的权限。

按照优先顺序来说,/etc/cron.allow 要优先于/etc/cron.deny。crond进程对于权限的工作方式是这样的:当用户使用crontab命令的时候,进程会在系统中查找/etc/cron.allow文件。找到该文件以后检测该用户是否在该文件中,如果在文件中就允许其使用crontab,如果不在就不允许其使用crontab。如果/etc/cron.allow文件不存在,则进程会查找/etc/cron.deny文件,然后检测该用户是否在这个文件中。如果两个文件都不存在,则系统默认只有root用户有使用crontab的权限。一般系统中,因为所有的用户默认都是被信任的,因此默认情况下,系统中存在/etc/cron.deny文件,并且该文件为空。

crontab运行方式

当用户使用crontab创建定时命令的时候,该项工作就会以文档的形式被记录到/var/spool/cron/目录内。并且该文档是用用户名命名的。举例来说,如果用户onmpw使用了crontab创建了定时的命令。那该项工作就会被记录到/var/spool/cron/onmpw文档内。但是我们尽量不要用vim去编辑这个文件,因为很可能由于语法错误导致cron不能运行。

crontab命令语法

接下来我们来看一下crontab的语法

# crontab [ -u 用户名 ] [选项参数]
选项参数:
         -u : 该选项只有root才有权限使用,用来帮助其他的用户设定或者移除crontab工作例程。
         -e : 编辑crontab的工作内容
         -l : 查阅crontab的工作内容
         -r : 移除所有的crontab的工作的内容。注意时所有的内容。如果只需要移除其中一条或者两条等需要使用 –e参数进行编辑。

crontab 每一条工作的格式

在说完了crontab的语法之后,我们马上使用如下命令来进行编辑了

# crontab –e

然后会打开一个vim的界面,这时我们需要了解一下该文件的内容格式才能去创建我们的工作例程。

每一项工作需要占一行,那么这一行的内容应该是什么呢?每一行的内容包括这样六项

分钟(0-59)  小时(0-23)  日期(1-31)  月份(1-12)  周(0-7)  命令

在这六项中,其他的都很容易理解。只有周这一项需要我们注意一下,就是周的数字如果设为0或者7的时候,代表的都是星期天的意思。

当然除了这些正常的数字之外,crontab还为我们提供了几个特殊的字符来帮助我们进行更灵活的设置。

*(星号):代表任何时刻都接受。

59   23  *  *  *  rm –rf /tmp/*
我们看在上面的示例中,日、月、周都是*,则代表的是‘不论何月,何日还是星期几的晚上23:59执行后面的命令’。

,(逗号):分割时段。比方说,我们需要在每天凌晨2点 和 晚上23点 删除/tmp/ 目录下的sess_开头的文件,那就应该这样设置

0  2,23  *  *  *  rm –rf /tmp/sess_*

-(减号):代表的是一个时间段。如果说我们需要在每天的上午8点到下午16点执行一项工作,那我们应该这样设置

0   8-16  *  *  *  命令

/n : n是数字,意思是说每隔n个单位就执行一次该命令。

*/3  *  *  *  *  命令

这里使用 *与/5配合,当然我们也可以使用 0-59/3这样的等价形式。

这里有一点需要注意:周和日月不可同时存在。也就是说如果设定了周为具体的数字,那我们的日和月需要用 * 来表示。同理,如果设置了日和月为具体的数字,则周则用* 来表示。

crontab工作例程管理

好了,我们知道了如何使用crontab –e 来设定工作例程了。接下来我们看一下如何管理我们设定的工作例程。

在crontab命令语法中我们讲到有两个选线 –l 和 –r。查找我们设定的工作例程使用-l。

# crontab –l
*/5 * * * * rm -rf /tmp/sess_*
10 11 * * * rm -rf /tmp/wsdl_*

这是查看所有的工作例程,如果我们想删除所有的工作例程可以使用 –r

# crontab –r  //删除所有的工作例程
# crontab –l   //再次查看
//已经为空了

当然,先前我们说过,如果你想只是删除某一项的话,需要用-e 再次编辑,将你要删除的那项工作的信息删除就可以了。这点千万要注意。

crontab是常用的命令,对于内容的格式我们一定要熟悉。

希望本文对大家有所帮助。

除非注明转载,本站文章均为原创,欢迎转载,转载请以链接形式注明出处

本文地址: