linux 中crontab 定时 shell脚本启动jar包,tomcat失败

crontab设置通过shell脚本定时启动jar包,脚本如下

restart.sh:

ps -ef|grep testjar |grep -v grep |awk '{print $2}'|xargs kill -9
nohup java -jar /usr/local/java/testjar1.jar >> /usr/local/java/output/testjar1.jar.log &
nohup java -jar /usr/local/java/testjar2.jar >> /usr/local/java/output/testjar2.jar.log &
nohup java -jar /usr/local/java/testjar3.jar >> /usr/local/java/output/testjar3.jar.log &

脚本内容很简单,先查找出testjar的进程,然后都杀掉

逐个启动jar包,执行一下,没问题,放在crontab第二天自动执行

第二天一看,杀是都杀掉了,但是都没启动,后来测试发现脚本确实执行了,杀掉了,没启动

后来在网上看到别人写的类似的脚本,发现了问题所在,没有环境变量,思考了一下

应该是这个问题,在当前shell会话中执行脚本会成功,因为当前的shell会话已经加载了/etc/profile里的java_home等变量

当前shell去执行,所以成功,退出当前shell后,crontab没有java_home等变量,所以执行失败,然后加上了那些变量再执行,成功!

正确的代码如下:

export JAVA_HOME=/usr/local/jdk/
export JAVA_BIN=$JAVA_HOME/bin
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib:$JAVA_HOME/lib
export JAVA_HOME JAVA_BIN PATH CLASSPATH
ps -ef|grep testjar |grep -v grep |awk '{print $2}'|xargs kill -9
nohup java -jar /usr/local/java/testjar1.jar >> /usr/local/java/output/testjar1.jar.log &
nohup java -jar /usr/local/java/testjar2.jar >> /usr/local/java/output/testjar2.jar.log &
nohup java -jar /usr/local/java/testjar3.jar >> /usr/local/java/output/testjar3.jar.log &

export那些我是从/etc/profile里复制的,jdk目录需要根据自己服务器所在的目录调整路径。

还有一次是shell脚本启动tomcat失败

我在脚本里写了

/bin/bash /usr/local/tomcat/bin/startup.sh

/usr/local/tomcat/bin/startup.sh

这两种启动tomcat的方式,有时候好使有时候就不行

后来在网上看到了别人的写法

tomcat_start=/usr/local/apache-tomcat-7.0.47/bin/startup.sh

$tomcat_start

定义变量,通过变量启动,这样就没问题,测试了很多次,一直是可以的,这个有点想不通是为什么。

猜你喜欢

转载自blog.csdn.net/wojiuwangla/article/details/107365921