linux下crontab自动执行class程序.doc

上传人:文库蛋蛋多 文档编号:2387991 上传时间:2023-02-17 格式:DOC 页数:12 大小:25.50KB
返回 下载 相关 举报
linux下crontab自动执行class程序.doc_第1页
第1页 / 共12页
linux下crontab自动执行class程序.doc_第2页
第2页 / 共12页
linux下crontab自动执行class程序.doc_第3页
第3页 / 共12页
linux下crontab自动执行class程序.doc_第4页
第4页 / 共12页
linux下crontab自动执行class程序.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《linux下crontab自动执行class程序.doc》由会员分享,可在线阅读,更多相关《linux下crontab自动执行class程序.doc(12页珍藏版)》请在三一办公上搜索。

1、linux下crontab自动执行class程序linux下crontab自动执行class程序收藏在两天的折磨下,终于将一个自动发送mail的java函数,其中包含一个连接mysql的jar包,一个mail.jar,成功在crontab中运行成功。中间坎坷不断。可能对于理解、熟悉linux的人这不算个事。但是对于新手来说,可能还确实有些困难。因为有一些细节需要注意。首先说我尝试过的方法:1、将添加CLASSPATH的语句和java a一起写入crontab中,执行失败;2、在用户下的.bashrc中添加环境变量CLASSPATH,之后在命令行下执行编译好的a.class-成功将java a写

2、入crontab,设定好时间-失败3、将写的.java和所需要的jar包打包生成一个jar包b.jar,之后在crontab中写入java-jar b-失败4、将所有命令写入一个shell文本c.sh,然后在crontab中写入sh c.sh-失败5、将所有命令写入一个文本d,然后在crontab中写入source d-失败6、将CLASSPATH一并写入d,然后在crontab中写入source d-失败7、最后将CLASSPATH一并写入d,然后在crontab中写入d-成功!其中需要注意的地方,其实就是3点:1、crontab只能执行可执行的程序,或者是一个shell文件。像设置CLAS

3、SPATH和source不属于path下的命令;2、d要是一个可执行的文件,不然无法执行;3、crontab中的环境变量和你用户的环境变量不同,要在你的执行文件中加入设置临时变量的语句CLASSPATH=.其实,需要理解的就是这么多。网上有很多如何在crontab中执行java程序的例子,但是第一、都不涉及环境变量,都是hello world;第二、只是一个单一的执行语句。虽然花了两天的时间,但是还是对linux有所理解。希望能给大家一个借鉴。下面是在这个过程中参考的资料:*在freebsd里面用专门的用户运行crontab我基本上没怎么用过,主要源于只要通过修改系统的crontab文件就可以

4、完成所有操作了,而且立即生效。如果你需要以非root身份运行的时候只要在/etc/crontab的文件里面写好运行身份就可以了。当然有些情况下,可能还是需要赋予普通用户cron的权力,只要那个以自己的身份运行crontab-e就可以,唯一的区别是,里面千万别写运行身份(/etc/crontab里面是有运行身份的),因为运行身份不需要指明,你以那个身份运行的crontab-e,身份就是那个。另外写cron命令有一个非常需要注意的地方就是要么你声明PATH变量,要么你把绝对路径写上,否则一定运行不了。如果你想知道你的cron为什么没执行,可以查看/var/log/cron,每次运行cron都会有详

5、细的记录*在linux下做开发首先就是需要配置环境变量,下面以配置java环境变量为例介绍三种配置环境变量的方法。1.修改/etc/profile文件如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。(1)用文本编辑器打开/etc/profile(2)在profile文件末尾加入:JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar exp

6、ort JAVA_HOME export PATH export CLASSPATH(3)重新登录注解:a.你要将/usr/share/jdk1.5.0_05jdk改为你的jdk安装目录b.linux下用冒号:来分隔路径c.$PATH/$CLASSPATH/$JAVA_HOME是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。d.CLASSPATH中当前目录.不能丢,把当前目录丢掉也是常见的错误。e.export是把这三个变量导出为全局变量。f.大小写必须严格区分。2.修改.bashrc文件这种方法更为安全,它可以把使用这些环境变量的权限控制

7、到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。(1)用文本编辑器打开用户目录下的.bashrc文件(2)在.bashrc文件末尾加入:set JAVA_HOME=/usr/share/jdk1.5.0_05 export JAVA_HOME set PATH=$JAVA_HOME/bin:$PATH export PATH set CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CLASSPATH(3)重新登录3.直接在shell下设置变量不赞

8、成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。只需在shell终端执行下列命令:export JAVA_HOME=/usr/share/jdk1.5.0_05 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar*c ro n是系统主要的调度进程,可以在无需人工干预的情况下运行作业。有一个叫做c ro nt ab的命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个c

9、 ro nt ab文件来保存调度信息。可以使用它运行任意一个s he ll脚本或某个命令,每小时运行一次,或一周三次,这完全取决于你。每一个用户都可以有自己的c ro nt ab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员是通过c ro n.d en y和c ro n.a ll ow这两个文件来禁止或允许用户拥有自己的c ro nt ab文件。3.1.1 crontab的域为了能够在特定的时间运行作业,需要了解c ro nt ab文件每个条目中各个域的意义和格式。下面就是这些域:第1列分钟15 9第2列小时12 3(0表示子夜)第3列日

10、13 1第4列月11 2第5列星期06(0表示星期天)第6列要运行的命令下面是c ro nt ab的格式:分时日月星期要运行的命令其中表示空格。C ro nt ab文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位于星期的后面。在这些域中,可以用横杠-来表示一个时间范围,例如你希望星期一至星期五运行某个作业,那么可以在星期域使用1-5来表示。还可以在这些域中使用逗号,,例如你希望星期一和星期四运行某个作业,只需要使用1,4来表示。可以用星号*来表示连续的时间段。如果你对某个表示时间的域没有特别的限定,也应该在该域填入*。该文件的每一个条目必须含有5个时间域,而且每个域之间要

11、用空格分隔。该文件中所有的注释行要在行首用#来表示。3.1.2 crontab条目举例这里有c ro nt ab文件条目的一些例子:30 21*/apps/bin/cleanup.sh上面的例子表示每晚的2 1:3 0运行/a pp s/b in目录下的c le an up.s h。45 41,10,22*/apps/bin/backup.sh上面的例子表示每月1、1 0、2 2日的4:4 5运行/a pp s/b in目录下的b ac ku p.s h。10 1*6,0/bin/find-namecore-exec rm;上面的例子表示每周六、周日的1:1 0运行一个f in d命令。0,3

12、0 18-23*/apps/bin/dbcheck.sh上面的例子表示在每天1 8:0 0至2 3:0 0之间每隔3 0分钟运行/a pp s/b in目录下的d bc he ck.s h。0 23*6/apps/bin/qtrend.sh上面的例子表示每星期六的11:0 0p m运行/a pp s/b in目录下的q tr en d.s h。你可能已经注意到上面的例子中,每个命令都给出了绝对路径。当使用c ro nt ab运行s he ll脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。记住,既然是用户向c ro n提交了这些作业,就要向c ro n提供所需的全部环境。不要假定c

13、ro n知道所需要的特殊环境,它其实并不知道。所以你要保证在s he ll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。如果c ro n不能运行相应的脚本,用户将会收到一个邮件说明其中的原因。3.1.3 crontab命令选项c ro nt ab命令的一般形式为:Crontab-u user-e-l-r其中:-u用户名。-e编辑c ro nt ab文件。-l列出c ro nt ab文件中的内容。-r删除c ro nt ab文件。如果使用自己的名字登录,就不用使用-u选项,因为在执行c ro nt ab命令时,该命令能够第3章后台执行命令23下载知道当前的用户。3.1.4创建一

14、个新的crontab文件在考虑向c ro n进程提交一个c ro nt ab文件之前,首先要做的一件事情就是设置环境变量E DI TO R。c ro n进程根据它来确定使用哪个编辑器编辑c ro nt ab文件。9 9%的U NI X和L IN UX用户都使用v i,如果你也是这样,那么你就编辑$H OM E目录下的.p ro fi le文件,在其中加入这样一行:EDITOR=vi;export EDITOR然后保存并退出。不妨创建一个名为u se rc ro n的文件,其中u se r是用户名,例如,d av ec ro n。在该文件中加入如下的内容。保存并退出。确信前面5个域用空格分隔。在

15、上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用t ty 1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的c ro nt ab文件,可以把这个新创建的文件作为c ro n命令的参数:$crontab davecron现在该文件已经提交给c ro n进程,它将每隔1 5分钟运行一次。同时,新创建文件的一个副本已经被放在/v ar/s po ol/c ro n目录中,文件名就是用户名(即,d av e)。3.1.5列出crontab文件为了列出c ro nt a

16、b文件,可以用:你将会看到和上面类似的内容。可以使用这种方法在$H OM E目录中对c ro nt ab文件做一备份:$crontab-l$HOME/mycron这样,一旦不小心误删了c ro nt ab文件,可以用上一节所讲述的方法迅速恢复。3.1.6编辑crontab文件如果希望添加、删除或编辑c ro nt ab文件中的条目,而E DI TO R环境变量又设置为v i,那么就可以用v i来编辑c ro nt ab文件,相应的命令为:$crontab-e可以像使用v i编辑其他任何文件那样修改c ro nt ab文件并退出。如果修改了某些条目或添24第一部分shell下载加了新的条目,那么

17、在保存该文件时,c ro n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。我们在编辑c ro nt ab文件时,没准会加入新的条目。例如,加入下面的一条:现在保存并退出。最好在c ro nt ab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。现在让我们使用前面讲过的crontab-l命令列出它的全部信息:3.1.7删除crontab文件为了删除c ro nt ab文件,可以用:$crontab-r 3.1.8恢复丢失的crontab文件如果不小心误删了c ro nt ab文件,假设你在自己的$H OM

18、 E目录下还有一个备份,那么可以将其拷贝到/v ar/s po ol/c ro n/u se rn am e,其中u se rn am e是用户名。如果由于权限问题无法完成拷贝,可以用:$crontab filename其中,f il en am e是你在$H OM E目录中副本的文件名。我建议你在自己的$H OM E目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了c ro nt ab文件(因为r键紧挨在e键的右边⋯;)。这就是为什么有些系统文档建议不要直接编辑c ro nt ab文件,而是编辑该文件的一个副本,然后重新提交新的文件。有些c ro nt ab的变体有些怪异,所以在使用c ro nt ab命令时要格外小心。如果遗漏了任何选项,c ro nt ab可能会打开一个空文件,或者看起来像是个空文件。这时敲d el et e键退出,不要按C tr l-D,否则你将丢失c ro nt ab文件。*shell文件内容是以#!/bin/bash开头。linux不以后缀来区分文件格式。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号