首页 > 代码库 > [ shell编程 ] crontab使用方法

[ shell编程 ] crontab使用方法

  在学习crontab命令之前,你看下有没有碰到过如下场景:

  (1)测试服务器每天都会产生很多垃圾文件,手工每天去清理非常繁琐,如何让系统自动按时清理呢?

  (2)如何定时收集服务器的关键信息呢?

  利用crontab命令,就可以完成脚本的定时执行。下面我们来看下crontab命令的用法

1、crontab中相关的域

分< >时< >日< >月< >星期< >要运行的命令

其中< >表示空格,总共分为6列。我们了解crontab中每一列所代表的含义:

第1列 分钟(1~59)
第2列 小时(1~23,0表示子夜)
第3列 日(1~31)
第4列 月(1~12)
第5列 星期(0~6,0表示星期天)
第6列 要运行的命令(请使用绝对路径)

  在这些域中,可以用横杠"-"来表示一个时间范围,例如你希望星期一至星期五运行某个作业,那么可以在星期域使用1-5来表示。还可以在这些域中使用逗号",",例如你希望星期一和星期四运行某个作业,只需要使用1,4来表示。可以用星号*来表示连续的时间段。如果你对某个表示时间的域没有特别的限定,也应该在该域填入*。该文件的每一个条目必须含有 5个时间域,而且每个域之间要用空格分隔。该文件中所有的注释行要在行首用#来表示。

2、crontab例子

(1)每天晚上的21:30运行/apps/bin/cleanup.sh脚本

30 21* * * /apps/bin/cleanup.sh

(2)每月1、10、22日的4:45运行/apps/bin/backup.sh脚本

45 4 1,10,22 * * /apps/bin/backup.sh

(3)每周六、周日的1:10运行find命令

10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;

(4)每天18:00至23:00之间每隔30分钟运行/apps/bin/dbcheck.sh脚本

0,30 18-23 * * * /apps/bin/dbcheck.sh

3、crontab命令选项

  根据上述的内容,我们知道了cron单个任务的配置规则,那么这一节主要了解怎么使用crontab命令针对任务进行新增、修改、删除的操作。

crontab命令的一般形式为:crontab [-u user] -e -l -r

其中:
-u 用户名。
-e 编辑crontab文件。
-l 列出crontab文件中的内容。
-r 删除crontab文件。
如果使用自己的名字登录,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前的用户。

3.1 创建一个新的crontab文件

  创建一个名为<user>cron的文件,其中<user>是用户名,例如davecron。在该文件中加入如下的内容

0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console

保存并退出。确保前面5个域用空格分隔。在上面的例子中,系统将每隔15分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。

为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为crontab命令的参数:

$ crontab davecron

现在该文件已经提交给cron进程,它将每隔15分钟运行一次。同时,新创建文件的一个副本已经被放在 /var/spool/cron目录中,文件名就是用户名(即dave)。

3.2 列出crontab文件

 为了列出crontab文件,可以用:

$crontab -l

0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console

 为了防止误删crontab文件,可以使用如下方法对crontab文件做个备份:

$ crontab -l > $HOME/mycron

3.3 编辑crontab文件

$ crontab -e

  这时我们可以像使用vi编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时,cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

#DT:delete core files,at3,30am on 1,7,14,21,26 days of each month

30 3 1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;

保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。
现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

$ crontab -l

0,15,30,45 18-06 * * * /bin/echo `date` > /dev/console

#DT:delete core files,at3,30am on 1,7,14,21,26 days of each month

30 3 1,7,14,21,26 * * /bin/find -name "core" -exec rm {} \;

3.4 删除crontab文件

$ crontab -r

 

[ shell编程 ] crontab使用方法