一,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 &
三,加入系统服务
暂未测试