linux服务器随机启动java程序

一,shell脚本启动:

用linux的shell脚本启动java程序有2个要注意的地方:

1,权限

系统文件 /etc/rc.d/rc.local 的权限

自己编辑 start.sh 脚本的权限

2,环境变量

java环境与java程序执行先后的顺序

以下是步骤:

1,编辑shell脚本

在指定目录下输入vi start.sh

脚本中输入

#!/bin/bash

nohup /usr/local/jdk/jdk1.8.0_171/bin/java -jar /home/apps/eureka/eurekaServer-0.0.1-SNAPSHOT.jar > /home/apps/eureka/log.log &

以上就是最简单的shell脚本语言,然后执行 chmod +x start.sh 赋予权限

注意:脚本里面为什么要指定jdk的目录,这就是要注意的第二个点,java环境变量的问题

因为linux的随机启动执行shell脚本并不是等服务器所有的服务都启动了再执行shell脚本的

也就是说java环境还没有启动好就执行了shell脚本,这个时候如果不指定jdk的目录

脚本里面的命令是找不到java环境变量的,自然无法启动

2,加入到系统启动文件中

输入 vi  /etc/rc.d/rc.local

在文件的最下面输入脚本的全路径

/home/apps/start.sh

然后执行 chmod +x /etc/rc.d/rc.local 赋予权限

3,测试

输入reboot重启服务器,看看java程序是否有启动

二,crontab

第一种方式存在一个弊端

比如项目代码比数据库服务先启动的话,会报数据库连接不上的异常,导致项目启动失败

这种情况下shell脚本是不会再次执行的

所以我用crontab的定时任务来执行

先检查项目使用的端口是否使用,如果没使用就执行脚本启动项目

shell脚本内容如下:

#!/bin/bash

check_port() {
        echo "正在检测端口。。。"
        netstat -tlpn | grep "\b$1\b"
}

if check_port 8006
then
        echo "前端服务已启动"
else
        echo "前端服务未启动,现在开始启动..."
        nohup java -jar /data/app/data-show/datashow-0.0.1-SNAPSHOT.jar > /data/app/data-show/data.log &
fi

crontab中的配置如下:

输入crontab -e

加入*/5  * * * * /data/app/data-show/check_datashow.sh

表示每5分钟执行 /data/app/data-show/这个目录下面的check_datashow.sh这个脚本

如果项目端口不存在说明项目没有启动,则执行启动项目命令,如果存在则不做操作

注意:这里遇到一个问题,就是关于环境变量的问题,网上有人说crontab是不关心环境变量的,所以需要指定java的目录

如果你的shell脚本单独执行没问题,但是在crontab里面就是不执行的话,那么应该是2个问题

1,没有指定java的目录

2,项目没有用全路径

nohup /tools/java/jdk1.8.0_121/bin/java -jar /data/app/data-show/datashow-0.0.1-SNAPSHOT.jar > /data/app/data-show/data.log &

三,加入系统服务

暂未测试

猜你喜欢

转载自blog.csdn.net/wsbgmofo/article/details/87969356