crontab 执行shell 执行java 运行不了

本文描述了在Linux环境下,通过crontab执行shell脚本来启动Java程序时遇到的问题。当直接运行shell脚本可以正常运行,但通过crontab定时任务执行时,Java程序无法正常启动。作者分析了可能的原因,包括脚本执行权限和环境变量。最终,通过检查并修改`/etc/profile`文件,设置正确的JAVA_HOME、JRE_HOME和CLASSPATH环境变量,解决了问题。
摘要由CSDN通过智能技术生成
查了下资料 如下:

在linux上部署项目的时候,我们往往通过一段shell来启动程序,甚至是通过crontab定时任务来定时的调用java程序,但是很奇怪的一个问题就是,比如我写了一个如下的shell脚本:

 

[java]  view plain copy
  1. #!/bin/sh  
  2. # -----------------------------------------------------------------------------  
  3. # Start script for the CMGP BOSSCONTROL   
  4. #  
  5. # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $  
  6. # -----------------------------------------------------------------------------  
  7. #指定字符集  
  8. LANG=zh_CN.GBK export LANG  
  9. RUN_HOME=.  
  10. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/checking.jar  
  11. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar  
  12. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar  
  13. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar  
  14. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar  
  15.   
  16. export CLASSPATH  
  17.   
  18. java  com.**.checking.Checking_Start >> log.out &   
 

 

手动命令行运行该脚本的时候,可以正常运行java程序,但是使用crontab定时任务,貌似就不起效果了,很是郁闷哪,查原因哪,分析可能原因:

 1)是否当前用户对此shell脚本没有可执行权限,通过ls -lrt /apps/service/mtk/checking/run.sh查看脚本是有可执行,但是有执行权限呀-rwxr-xr-x

 2)既然单独运行脚本没问题,那会不会是定时的问题呢?于是写了一个简单的输出的shell脚本通过定时也是没问题的。说明还是脚本的问题。

后来上网查了下,想到可能是脚本中环境变量的原因,因为通过crontab运行脚本,是以root用户,而不是当前用户,于是cat /etc/profile查看环境变量,然后修改脚本如下:

[java]  view plain copy
  1. #!/bin/sh  
  2. # -----------------------------------------------------------------------------  
  3. # Start script for the CMGP BOSSCONTROL   
  4. #  
  5. # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $  
  6. # -----------------------------------------------------------------------------  
  7. export PATH=/apps/usr/java/jdk1.5/bin:$PATH  
  8. export JAVA_HOME=/apps/usr/java/jdk1.5  
  9. export JRE_HOME=/apps/usr/java/jdk1.5/jre  
  10. export CLASSPATH=/apps/usr/java/jdk1.5/lib:/apps/usr/java/jdk1.5/jre/lib:$CLASSPATH  
  11. RUN_HOME=/apps/service/checking  
  12. CLASSPATH=$CLASSPATH$RUN_HOME/lib/checking.jar  
  13. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar  
  14. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar  
  15. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar  
  16.  CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar  
  17.   
  18. export CLASSPATH=$CLASSPATH  
  19.   
  20. java  com.**.checking.Checking_Start >> log.out &   

  我也照着看了下cat /etc/profile  并按照配置文件改了 现在好了 多谢原文作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值