免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1075 | 回复: 0
打印 上一主题 下一主题

Crontab应用简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-20 14:57 |只看该作者 |倒序浏览
有时候我们需要定时地处理大量的数据,这里我们称之为Batch处理。
Batch处理就是定时地执行某个程序。其实可以很明显的看到,这里我们需要做到两个东东:定时执行程序。下面描述一下这两个东东。
定时:
我们这边使用的是Linux系统,如果我们需要按一定的周期执行程序,我们可以使用crontab来实现。crontab (C)指令从指定文件或标准输入拷贝或编辑成用户的 crontab 文件,该文件规定了在指定日期和时间调度运行一些指令。
可以使用如下的方法来使用:
$ crontab -e
编辑方式与vi相同。
编辑结束然后保存退出,系统会自动的安装crontab。修改crontab时可以使用相同的方法。虽然有别的办法可以实现相同的效果,但是这里建议使用这种方法,安全第一嘛!
Example:
$ crontab -e
  
#Created by Yaogao 2005-12-30 12:43
30 11 * * * (echo "Crontab start to run ....";
. /etc/profile;/home/ebid/bin/bash.sh;echo "Crontab stopped!")
00 17 * * * (echo "Crontab start to run ....";
. /etc/profile;/home/ebid/bin/bash.sh;echo "Crontab stopped!")
解释一下:
第一:"#"注释开始
第二:30 11 * * * 标示各种时间。(30 11 * * *的意思是:每天11点30分)
所以这5个数分别代表minutes hours day_of_month month day_of_week
  minutes      分钟   0-59
  hours       小时   0-23
  day_of_month   日    1-31
  month       月    1-12
  day_of_week    星期     0-6(0表示星期日)
还有就是"*"代表该字段所有的可能值。
下面是比较有意思的一些时间设定:
#每天早上6点
0 6 * * *
  
  
#每两个小时
0 */2 * * *
  
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * *
  
#每个月的4号和每个星期的星期一到星期三的早上11点
0 11 4 * mon-wed
  
#1月份1日早上4点
0 4 1 jan *
第三:Command
对于command,如果只有单个命令,可以这样:
#每天早上6点执行date命令
0 6 * * * date
如果是多个命令:0 6 * * * (echo "Crontab start to run ....";
. /etc/profile;/home/ebid/bin/bash.sh;echo "Crontab stopped!")那么命令之间用";"分隔。执行顺序由先至后。
其实这里还有一个比较重要的东西,就是 . /etc/profile,这个命令必须得有,虽然这个是全局变量,而且系统启动之后就应该设定好了,但是这里仍然需要重新设定。
  
这样我们就实现了在固定的某个时间执行我们的程序。
  
执行程序:
执行程序就相对来说比较简单了,只要我们设置好需要的环境变量,那么程序就可以执行了。一般的做法都是写一个脚本,比如说上面的bash.sh。
Example:
#!/bin/csh -f
#setenv hello
setenv CLASSPATH '.'
set batch_home=/home/oracle/project/
set flist=`ls $batch_home/lib/*.jar`
foreach name ($flist)
        setenv CLASSPATH ${CLASSPATH}:${name}
end
  
echo "Shukei Start .........."
cd   $batch_home/bin
java divinemind.onlyfun.Helloworld HelloYG
echo "Shukei End ........."
解释一下:
#!/bin/csh -f:指定shell,上面提到过注释,但是对于脚本,第一行不被认为是注释。这里我们使用C shell,虽然这种shell不赞成被使用,但是就像我们使用任何语言写Helloworld的效率都差不多一样,我们这里使用别的shell也没有什么区别。其实最重要的一点还是C shell有我很需要的一个重要的支持,下面会有提到。
  
#setenv hello :注释
  
setenv CLASSPATH '.' :设定环境变量,setenv命令跟bash的export命令一样可以设定环境变量。
  
set batch_home=/home/oracle/project/:设定shell变量。
set flist=`ls $batch_home/lib/*.jar` :设定shell变量。刚刚说到的C shell的一个重要支持就在这里。其实其他shell也应该可以实现。
  
foreach name ($flist)
        setenv CLASSPATH ${CLASSPATH}:${name}
end
循环设定环境变量。下面几句的功能就是将jar文件设定到环境变量,让java程序得以执行。
setenv CLASSPATH '.'
set batch_home=/home/oracle/project/
set flist=`ls $batch_home/lib/*.jar`
foreach name ($flist)
        setenv CLASSPATH ${CLASSPATH}:${name}
end
  
下面这几句很简单,就是执行java代码。
echo "Shukei Start .........."
cd   $batch_home/bin
java divinemind.onlyfun.Helloworld HelloYG
echo "Shukei End ........."
  
上面描述了如何定时和如何写脚本执行我们的java程序,运行结果系统通过mail发送到当前用户的邮箱。bash.sh能够执行我们的java程序,crontab能够定时地执行我们的bash.sh,那么大家可以看到,batch处理功能已经做好,呵呵!
  
命令介绍:
如果对于Linux系统跟我一样不是很熟悉,下面介绍几个命令:
$ chmod 777 bash.sh
这个命令可以使bash.sh可执行。chmod是change modify的意思,后边的777表示文件所有者、组用户、其他用户都可以读、写、执行这个文件,修改777就可以设定别的权限(比如说666那么这个文件将不可以执行)。其实刚刚如果我们用vi建立bash.sh的时候,bash.sh是不可以执行的,但是使用这个命令之后就可以了。
  
还有就是chown(change owner)和chgrp(change group)这两个命令,每当创建新文件与目录时,标记你是文件所有者,你的同组人员为组员,如果要把文件的使用权交给别人,只有文件所有者方可更改(当然root干什么都可以),命令如下:
$chown owner file
chown改变了文件的身份ID (UID)
改变属组要改变文件所属的组别--文件组ID(GID),命令变为:
$chgrp group file
其实应该还有很多其他的命令,大家可以上网查询,我也有一些东西,可以跟大家共享。
  
Batch处理部署:
Batch处理的.class文件可以存放在任意目录下,当然需要当前用户拥有访问权限,所以我们一般情况下将文件存放在当前用户的工作目录(/home/currentuser)下,然后我们自己写的shell文件也是放在什么地方都可以,但是我们最好也是放在当前用户的工作目录下或者更下级目录。上面的例子中就将bash.sh放在了batch处理工程的/bin目录下。至于crontab,由于我们使用$crontab –e命令,所以我们不需要关心文件所在的位置。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/71313/showart_1006095.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP