Jar包启动并设置参数
约 1448 字大约 5 分钟
2024-11-07
后台启动jar进程
nohup java -jar -Xms512M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump/xxl_job
xxl-job-admin-2.4.1.jar --server.port=8090 \
--server.servlet.context-path="/job" \
--spring.datasource.url="jdbc:mysql://192.168.1.5:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" \
--spring.datasource.username="root" \
--spring.datasource.password="root" > /dev/null 2>&1 &
参数代表的含义:
nohup
后台运行0
标准输入(一般是键盘)1
标准输出(一般是显示屏,是用户终端控制台)2
标准错误(错误信息输出)> /dev/null 2>&1 &
:首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 一般项目中有定义中输出运行日志到指定地址,这样的话,就不需要再单独输出nohup.out文件,这种情况可以考虑使用这种。
综合脚本(启动停止状态日志)
#!/bin/bash
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PURPLE='\033[35m'
CYAN='\033[36m'
NC='\033[0m' # No Color
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=ruoyi-admin.jar
DEPLOY_DIR=/data/app
LOG_PATH=./logs/RuoYi-Vue-Plus/RuoYi-Vue-Plus.log
#检查程序是否在运行
is_exist(){
pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' `
ps -ef | grep $APP_NAME
echo "-----------------------------------------------------------------"
# 如果存在返回:1, 不存在返回:0
if [ -z "${pid}" ]; then
# 如果 pid 变量为空(没有进程 ID),执行此分支
return 0
else
return 1
fi
}
#启动方法
start(){
is_exist
if [ $? -eq 1 ]; then
echo -e "${CYAN} 应用${APP_NAME} 正在运行,请勿重复启动。PID=${pid} ${NC}"
else
nohup java -jar -Xms512M -Xmx1024M -XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/data/heapdump $DEPLOY_DIR/$APP_NAME \
--spring.profiles.active=prod > /dev/null 2>&1 &
echo -e "${GREEN} 应用 ${APP_NAME} 启动成功 ~ ${NC}"
log
fi
}
#输出日志
log(){
is_exist
if [ $? -eq 1 ]; then
tail -f -n 50 ${LOG_PATH}
else
echo -e "${PURPLE} 应用 ${APP_NAME} 尚未启动 ${NC}"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq 1 ]; then
echo -e "${RED} 尝试停止 ${APP_NAME} 应用... ${NC}"
kill $pid
sleep 7
is_exist
if [ $? -eq 1 ]; then
echo -e "${RED} 直接停止 ${APP_NAME} 应用... ${NC}"
kill -9 $pid
sleep 2
is_exist
else
echo -e "${RED} 应用 ${APP_NAME} 已经停止运行 ${NC}"
fi
else
echo -e "${YELLOW} 应用 ${APP_NAME} 尚未启动 ${NC}"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq 1 ]; then
echo -e "${GREEN} 应用 ${APP_NAME} 正在运行,PID=${pid} ${NC}"
else
echo -e "${PURPLE} 应用 ${APP_NAME} 尚未启动。 ${NC}"
fi
}
#重启
restart(){
stop
sleep 2
start
}
color() {
echo -e "${RED}启动服务成功!RED${NC}"
echo -e "${GREEN}启动服务成功!GREEN${NC}"
echo -e "${YELLOW}启动服务成功!YELLOW${NC}"
echo -e "${BLUE}启动服务成功!BLUE${NC}"
echo -e "${PURPLE}启动服务成功!PURPLE${NC}"
echo -e "${CYAN}启动服务成功!CYAN${NC}"
exit 0 # 正常退出
}
#使用说明,用来提示输入参 数
help() {
echo -e "${CYAN} help: sh 脚本名.sh [run | stop | restart | state | log] ${NC}"
exit 1 # 异常退出
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"run"|"start")
start
;;
"stop")
stop
;;
"state")
status
;;
"restart"|"rerun")
restart
;;
"help")
help
;;
"color")
color
;;
"log"|"tail")
log
;;
*)
echo "无效指令:$1"
help
;;
esac
exit 0
jar跟参数方式
1、第一种形式 -DpropName=propValue -DpropName=propValue的形式携带,要放在-jar参数前面
# 取值:System.getProperty("propName")
java -Dxxx=test -DprocessType=1 -jar xxx.jar
2、第二种形式 参数直接跟在命令后面
# 取值:参数就是jar包里主启动类中main方法的args参数,按顺序来
java -jar xxx.jar processType=1 processType2=2
3、第三种形式 springboot的方式,--key=value方式
# 取值:spring的@value("${xxx}")
java -jar xxx.jar --xxx=test
各种形式入参
# 后台启动不输出日志
nohup java -jar -Xms512m -Xmx1024m \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/heapdump custom-1.0.0.jar \
--server.servlet.context-path=/job \
--spring.profiles.active=prod \
--spring.datasource.username="root" \
--spring.datasource.password="mysqlroot" \
--spring.datasource.url="jdbc:mysql://192.168.1.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" \
--business.robot.robot-key=kkkkkkkkkk > /dev/null 2>&1 &
停止jar包进程
#!/bin/bash
# 写死服务名称
jar_name=appName.jar
#服务停止
echo "${jar_name} 服务停止中。。"
#kill:适用于已知 PID 的单个进程
#pkill:适用于根据名称、命令行参数、用户等条件匹配多个进程
#pkill -9 -f $app_name
#查找所有包含 gas-custom.jar 的进程,并终止它们
ps -ef | grep $jar_name | grep -v grep | awk '{print $2}' | xargs kill
#检查服务是否停止成功
sleep 1
if [[ `ps aux |grep java | grep ${jar_name} | grep -v grep | wc -l` -eq 0 ]];then
echo "$jar_name 服务停止成功!"
else
echo "$jar_name 服务停止失败!"
exit 1
fi
jar包解压后重新打包
jar cvf0M app-bootstrap.jar ./
windows操作jar包
# 列出所有正在运行的与 java 相关的进程
tasklist | findstr java
# 列出所有与端口 8090 相关的网络连接和监听状态,进程 ID
netstat -ano | findstr :8090
# 关掉pid为5的进程
taskkill /PID 5 /F
终端打印彩色字体
语法:echo -e "\033[前景色;背景色;样式m你要打印的内容\033[0m"
-e
:启用转义字符解析(必须)\033[
: 控制码的开始开始标志(ASCII码:(char)27;十六进制:0x1b;八进制:003;unicode:\u001b)37
:字体颜色编码,33表示白色40
:背景颜色编码,40表示黑色3
:字体样式编码,3表示斜体m
:控制字符结束的标志\033[0m
:恢复默认颜色,通常结束处会将颜色恢复为默认39
常用字体:
- 字体色:30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:青 37:白
- 背景色:40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:绿 47:白
- 字体样式:重置所有属性:0,加粗:1,斜体:3,下划线:4,闪烁:5,反转:7
示例:
echo -e "\033[31m 这是红色文字 \033[0m"
echo -e "\033[32;1m 这是绿色加粗文字 \033[0m"
echo -e "\033[33;44m 黄字蓝背景 \033[0m"
echo -e "\033[35;4m 带下划线的紫色文字 \033[0m"
封装成函数便于复用
# 定义颜色变量
RED='\033[31m'
GREEN='\033[32m'
YELLOW='\033[33m'
BLUE='\033[34m'
PURPLE='\033[35m'
CYAN='\033[36m'
NC='\033[0m' # No Color
# 使用示例
echo -e "${GREEN}启动服务成功!${NC}"
echo -e "${RED}错误:文件未找到!${NC}"