Chinaunix首页 | 论坛 | 博客
  • 博客访问: 425479
  • 博文数量: 79
  • 博客积分: 2886
  • 博客等级: 少校
  • 技术积分: 968
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-16 10:33
文章分类

全部博文(79)

文章存档

2013年(7)

2012年(17)

2011年(28)

2010年(25)

2009年(1)

2008年(1)

我的朋友

分类: Java

2013-06-04 11:26:45

引入:
java被crontab调度时,当进程没有执行完,crontab会启动一个新进程;
要解决这个问题,需要在启动脚本里判断进程是否存在。

1新建项目Test 、
java源代码
package test;
import java.util.Date;
public class Test {
public static void main(String args[]){
System.out.println(new Date()+" begin---------");
try {
Thread.sleep(1000*60*2);//休眠两分钟
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(new Date()+" end---------");
}
}
2.将项目打包成Test.jar,并放到linux上 /home/jyd/Test目录下

3.编写java进程的启动脚本startTest.sh

#!/bin/bash
process=`ps aux | grep Test | grep -v grep`;
if [ "$process" != "" ]; then
    echo "process exsits";
else
   /usr/local/java/jdk1.7.0_07/bin/java -jar /home/jyd/Test.jar &
fi
注:一定要写绝对路径

4.在文件夹/usr/local/jobs下建立启动脚本的软链接

 ln -s /home/jyd/Test/startTest.sh /usr/local/jobs/startTest.sh

5.将项目启动脚本所在路径加到环境变量中

vi  /etc/profile添加
JOB_HOME=/usr/local/jobs
PATH=$JOB_HOME:$JAVA_HOME/bin:$PATH

6.编辑crontab -e,设置进程一分钟运行一次
*/1 * * * * /bin/bash /usr/local/jobs/startTest.sh >>  /home/jyd/Test/log.txt 2>&1

7.重启crontab service crond restart


进程执行一次用两分钟;
crontab每隔一分钟调度一次;
如果进程没有执行完(进程存在),则返回

log日志
Tue Jun 04 11:08:01 CST 2013 begin---------
process exsits
process exsits
Tue Jun 04 11:10:01 CST 2013 end---------
Tue Jun 04 11:11:01 CST 2013 begin---------
process exsits
process exsits
Tue Jun 04 11:13:01 CST 2013 end---------
Tue Jun 04 11:14:01 CST 2013 begin---------
process exsits
Tue Jun 04 11:16:01 CST 2013 end---------
Tue Jun 04 11:16:02 CST 2013 begin---------
process exsits
process exsits
Tue Jun 04 11:18:02 CST 2013 end---------
Tue Jun 04 11:19:01 CST 2013 begin---------
process exsits


阅读(2878) | 评论(0) | 转发(0) |
0

上一篇:java泛型中的extends和super

下一篇:没有了

给主人留下些什么吧!~~