Linux运行jar包脚本,我的 jar包和 .sh文件在同一目录。
#!/bin/sh
port=8090 #端口
jar_name=ruoyi-admin.jar #/usr/local/ry-vue/ruoyi-admin.jar 要到当前目录执行,
#文件格式化::set ff=unix ,在win创建的文件放到linux需要格式化
#授权:chmod +x ry-vue.sh
#运行脚本提示信息
tips(){
echo "-------------------------------------"
echo ""
echo "项目端口: ${port}"
echo "项目地址: ${jar_name}"
echo ""
echo "你可以使用如下参数进行操作"
echo "-status -查看当前项目运行状态"
echo "-log -查看当前项目运行日志"
echo "-start -启动当前项目"
echo "-stop -停止当前项目"
echo "-restart -重启当前项目"
echo ""
echo "-------------------------------------"
}
#查看状态
status(){
#查询端口的PID
pid=$( ps -ef |grep $jar_name |grep 'java -jar'|grep -v grep|awk '{print $2}')
#判断端口是否被占用
if [ -z "${pid}" ];then
echo "没有项目在运行"
else
echo "项目正在运行中"
fi
}
#启动项目
start(){
pid=$( ps -ef |grep $jar_name |grep 'java -jar'|grep -v grep|awk '{print $2}')
if [ -z "${pid}" ];then
echo "正在启动......"
nohup nohup java -jar -Xms512M -Xmx512M $jar_name > /usr/local/ry-vue/catalina.out 2>&1 &
else
echo "项目运行中或端口已被占用"
fi
}
#停止项目
stop(){
pid=$( ps -ef |grep $jar_name |grep 'java -jar'|grep -v grep|awk '{print $2}')
if [ -z "${pid}" ];then
echo "没有项目在运行,请先启动"
else
kill -9 $pid
echo "已杀死进程为 ${pid} 的应用"
fi
}
#重启项目
restart(){
pid=$( ps -ef |grep $jar_name |grep 'java -jar'|grep -v grep|awk '{print $2}')
echo "正在杀死端口 ${port} 的pid ${pid} 中..."
if [ -z "${pid}" ];then
echo "项目未启动"
else
kill -9 $pid
fi
sleep 5 #睡眠五秒
start #调用启动方法
echo "项目重启成功!"
}
# 滚动打印日志
printLog(){
tail -f /usr/local/ry-vue/catalina.out
}
#参数选项
case "$1" in
"-status")
status
;;
"-start")
start
;;
"-stop")
stop
;;
"-log")
printLog
;;
"-restart")
restart
;;
*)
tips
;;
esac
脚本也是我复制来的,有些指定了javahome路径,jar包是不需要的,
总结了以下步骤:
1 在window创建以上的ry-vue.sh文件,并上传到linux
把jar包名改成你自己的,
把start方法 printLog方法里日志的路径改成你自己的
2 vim ry-vue.sh
3 :set ff=unix ,格式化文件,不用按 a编辑
4 chmod +x ry-vue.sh ,授权
5 很重要的一点,看 jar_name=ruoyi-admin.jar,
我看了很多人写的全路径 jar_name=/usr/local/ry-vue/ruoyi-admin.jar ,试了很久,根本获取不到pid,哎都不试的吗?只能写 jar_name=ruoyi-admin.jar
6 在.sh目录执行,如下命令即可
sh ry-vue.sh -start
sh ry-vue.sh -stop
sh ry-vue.sh -restart
sh ry-vue.sh -status
sh ry-vue.sh -log