一、方式
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`
#創(chuàng)建日志路徑
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監(jiān)控參數
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
}
#服務狀態(tài)
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、系統(tǒng)服務啟動,自帶定義一個系統(tǒng)服務來啟動,我使用的是這種
1、創(chuàng)建一個系統(tǒng)服務文件
vi /etc/systemd/system/demo.service
1.
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、執(zhí)行命令
復制
systemctl start demo # 啟動
systemctl stop demo # 關閉
systemctl status demo # 服務當前狀態(tài)
systemctl enable demo # 設置服務開機啟動
systemctl disable demo # 關閉服務開機啟動
systemctl restart demo # 重啟服務
-----------------------------------
java -jar 后臺運行 linux jar包如何運行l(wèi)inux
https://blog.51cto.com/u_13019/6306686
(責任編輯:admin)本文地址:http://m.bmm520.net/info/LinuxServer/2023/0624/23985.html