【java】Linux上运行jar包的几种方式

一、方式

1、一般分文两种,一种是打成war包放到tomcat里面;另一种就是打成jar包直接运行,jar包里面自带tomcat;根据自己需要来决定使用哪种方式,这里我使用的是jar包方式

二、启动

1、直接启动:java -jar demo.jar

这种启动方式适合自己测试,因为一般部署在Linux上,这种方式关闭会话窗口或者ctrl+c都会关闭Java

2、后台启动:java -jar demo.jar &

这种方式会在后台静默运行,关闭会话窗口会中断Java,和上一种一样,这两个日志都是打印在窗口的,关闭会话就没了

3、nohup启动:nohup java -jar demo.jar &

这种会把日志打印到nohup.out文件中,但只会打印标准输出不会打印错误输出,关闭通过pid号来kill掉

4、nohup启动:nohup java -jar demo.jar>/root/demo.log 2>&1 &

这种会把普通输出和错误输出都打印到demo.log中

# 启动/停止等脚本

#!/bin/sh

ENV=dev

APP_HOME="你的项目路径"

APP_NAME=MyDemo

RUNNING_USER=root

LOG_DATE=`date +%Y%m%d%H%M%S`

#创建日志路径

if [[ ! -d "$APP_HOME/logs" ]]; then

mkdir ${APP_HOME}/logs

fi

if [[ ! -f "$APP_HOME/$APP_NAME.jar" ]]; then

echo "---------------------------------"

echo "$APP_NAME不存在>>>>>"

echo "---------------------------------"

exit 1

fi

#实时日志

LOG_PATH=${APP_HOME}/logs/${APP_NAME}.out

#GC日志信息

GC_LOG_PATH=${APP_HOME}/logs/gc-${APP_NAME}-${LOG_DATE}.log

#JMX监控参数

JMX="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

#JVM启动参数

JVM_OPTS="-Dname=$APP_NAME -Djeesuite.configcenter.profile=$ENV -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -Xloggc:$GC_LOG_PATH -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"

APP_FILE=${APP_NAME}.jar

pid=0

#获取进程号

getPid() {

pid=`ps -ef |grep ${APP_FILE} |grep -v grep |awk '{print $2}'`

}

#启动服务

start() {

getPid

if [[ ! -n "$pid" ]]; then

JAVA_CMD="nohup java -jar $JVM_OPTS ${APP_HOME}/${APP_NAME}.jar >> $LOG_PATH 2>&1 &"

echo "---------------------------------"

su ${RUNNING_USER} -c "$JAVA_CMD"

echo "启动中>>>>>>>"

echo "---------------------------------"

sleep 2s

#tail -f ${LOG_PATH}

else

echo "$APP_NAME is running PID: $pid"

fi

}

#停止服务

stop() {

getPid

if [[ ! -n "$pid" ]]; then

echo "$APP_NAME not running"

else

echo "$APP_NAME stop..."

kill -9 ${pid}

fi

}

#重启服务

restart() {

stop

sleep 1s

start

}

#服务状态

status() {

getPid

if [[ ! -n "$pid" ]]; then

echo "$APP_NAME not running"

else

echo "$APP_NAME running PID: $pid"

fi

}

#查看最近100行日志

hundred() {

LOG_PATH=${APP_HOME}/logs/${APP_NAME}.out

tail -100f ${LOG_PATH}

}

case $1 in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

status)

status

;;

log)

hundred

;;

*)

echo "$0: Usage: $0 {start|stop|restart|status|log}"

exit 1

;;

esac

5、系统服务启动,自带定义一个系统服务来启动,我使用的是这种

1、创建一个系统服务文件

vi /etc/systemd/system/demo.service

2、输入下面信息

[Unit]

# 服务名称

Description=demo Service

# 在什么服务启动后启动

After=syslog.target

[Service]

# jar包启动命令,这里java要写绝对路径

ExecStart=/usr/local/jdk1.8.0_291/bin/java -jar /usr/local/java/demo.jar

[Install]

# 设置服务安装,可以设置多个,用逗号隔开

WantedBy=multi-user.target

3、保存

4、执行命令

systemctl start demo # 启动

systemctl stop demo # 关闭

systemctl status demo # 服务当前状态

systemctl enable demo # 设置服务开机启动

systemctl disable demo # 关闭服务开机启动

systemctl restart demo # 重启服务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值