linux 定时运行jar包,linux系统中的定时器crontab的使用攻略、常见错误问题和运行.jar文件的具体实例。...

今天有个定时任务要从windows上部署到linux上,查了好多资料,总是有各种各样的问题。虽然最后终于都一一解决了,不过感觉现有的那些详细教程什么的不够详细,或者说大神们想当然的事,像我这种小白就还是会跳坑。然后就把网上现有的许多的crontab的文章总结了一下,加上自己的经历和体会,分享给大家。

首先基本介绍了一下crontab,然后说一些具体的列子,最后则是一些常用的命令和总结我遇到的一些问题。好了,待我一一说来吧。

首先,Linux下定时任务是有个进程的,crond,他的配置文件是/etc/cron*文件下。用户如果想使用crontab任务(即定时任务),可以用

crontab  -e   (进入定时任务编辑界面,默认为VI编辑器,编辑器可配置。在此顺带说两句VI编辑器的使用,简单来说,进入编辑,可以用以下两个命令直接编辑

A:当前行的尾部追加内容    i:游标前插入内容  l:游标后插入内容)

如果你之前没有过定时任务的话,那么crontab -e进去之后直接就是空白。然后就进行添加就行了,添加格式如下:

基本格式 :

*  *  *  *  *  command

分 时   日  月 周   命令

第一个星号所在的列表示分钟,范围为1~59,*表示范围内的所有值,即全选,*/1  表示每一分钟,同样,*/5表示整点开始,每5分钟。

第二个星号所在的列表示小时,范围1~23(0表示0点)。同样适用于*/1 表示每小时。

第三个星号所在的列表示日期,范围1~31。

第四个星号所在的列表示月份,范围1~12.

第五个星号所在的列表示周,范围0~6 (0表示周日)。

第六个星号所在的列表示命令,即你想要执行的命令。

(额外说一下VI的保存命令,在填写完成你要定时执行的任务后,用:wq或者:x保存退出,:wq表示强制保存退出,:x表示有更改时才会保存退出,没有直接退出,二者设计版本号的更新问题,在此不细说。)

下面具体给出几个crontab运用时间的例子

*/1 * * * * /home/manager/ps.sh

表示每一分钟执行一次,在路径/home/manager/下的ps.sh文件

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

表示每月1、10、22日的4 : 45重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4号与每周一到周三的11点重启apache

因为我是要用linux的定时任务定时执行.jar文件,所以就以此详细说一下。

首先我的crontab命令很简单 13 * * * *  /home/RealDataPublish.sh 即每小时的13分钟执行以下RealDataPublish.sh这个文件。

然后就是在RealDataPublish.sh文件中的编写了,大家都知道,在JAVA环境中,运行jar文件直接java -jar +文件名就可以了,然后我的

RealDataPublish.sh文件一开始就是这么写的。。。然后错误提示   java:无法获取的命令。(关于错误提示在哪下面会说。)

然后就是RealDataPublish.sh中的内容了,把我的写法贴出来大家参考一下吧。

cd /usr/local/     (获取.jar文件的路径)

/usr/java/jdk1.6.0_13/bin/java -jar RealDataPublish.jar -cp /usr/java/jdk1.6.0_13/lib/tools.jar:/usr/java/jdk1.6.0_13/lib/dt.jar:   (需要在java前加上

JDK安装路径,最后 -cp 获取配置信息)

就可以完成在linux中用定时器运行jar文件的任务了。

最后说一下,定时器执行一次任务,每次都会有回执邮件,在/var/spool/mail/root 下 (如果你是root用户登录的话)

常用的命令:

crontab -l   查看所有正在运行的所有crontab命令

crontab -r : 删除目前的时程表

crontab file [-u user]-用指定的文件替代目前的crontab

ps –ef|grep crond 查看crontab是否已经启动

如果没有启动则运行service crond start 即可启动。(如果提示Redirecting to /bin/systemctl start  crond.service,则是因为版本的问题导致,可以使

用/bin/systemctl start  crond.service进行启动)

如果是关于crontab不能执行的问题,初步总结了有以下几个原因:

第一,脚本的原因:大多数情况下,就是我们的脚本的问题,这种问题导致crontab不能执行的概率占到 70%以上。因为程序执行到某一步导致crontab终止执行。

第二,执行环境问题,当我们碰到第一情况下,一般都可以通过手动执行程序将问题扼杀在摇篮里,一般情况下高手是不应该犯第一种错误的。问题是当我们 手动执行成功而crontab不能执行的时候,就是执行环境的问题,例如相关路径的设置问题。解决方案:在代码最前面执行 source /home/user/.bash_profile

第三,系统时间不正确。这种问题最好理解,也是比较常见和隐蔽的问题,解决方案:date -s ********

第四,就是我们的脚本是否有可执行权限。必须保证执行脚本的用户有执行改文件的权限。

第五,crontab 守护进程死掉了。这种情况是极少发生的,但也不排除,当我们实在是找不到其他原因的时候可以用。解决方案:重启该进程。

写到这才发现,我之前遇到的坑,在我介绍的时候就已经避过了...尴尬! 那错误的地方我就不一一说明了。如果有任何其他的问题都可以去查看回执

邮件的内容,以报错信息来排错,就简单的多了。

最后,祝大家编码顺利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值