部署JAR包到linux
-
查看运行环境:
centos版本:# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
java版本:
# java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
命令启动:
-
启动命令
nohup java -jar -Xms1024m -Xmx1536m -XX:PermSize=128M -XX:MaxPermSize=256M stxzApi.jar --spring.profiles.active=prod 2>&1 &( 其中 2> 表示把标准错误(stderr)重定向,尖括号后面可以跟文件名,或者是&1, &2,分别表示重定向到标准输出和标准错误。)
-
查看进程
ps -ef|grep java 、jps -v -
终止线程
kill -9 xxxx
编写启动shell脚本
在/etc/init.d/目录下创建stxzApi.sh脚本如下:
(#保证该脚本能被chkconfig识别,如果使用chkconfig 配置启动,需要放到此目录下 )
#!/bin/sh
#chkconfig: 2345 85 15
#description:auto_run
#需要指定java环境变量
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#程序名
RUN_NAME="stxzApi.jar"
#jar 位置
JAVA_OPTS=/usr/local/app_jar/stxzApi.jar
LOG_OPTS=/usr/local/app_jar/logs/stxzApi_main.log
#开始方法
start() {
#测试环境使用这个 设置编码为utf-8
#nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS >$LOG_OPTS 2>&1 &
#生产环境指定为prod
nohup java -jar -Dfile.encoding=utf-8 --spring.profiles.active=prod $JAVA_OPTS >$LOG_OPTS 2>&1 &
echo "$RUN_NAME started success 进程已启动成功,正在打开日志文件($LOG_OPTS),退出后将在后台运行:"
tail -f $LOG_OPTS
}
#结束方法
stop() {
echo "stopping $RUN_NAME ..."
kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'`
echo "stoped $RUN_NAME ...(已停止 $RUN_NAME)"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac
设置执行权限
将stxzApi.jar和stxzApi.sh加上执行权限:
chmod +x /etc/init.d/stxzApi.sh
chmod +x /etc/init.d/stxzApi.jar #根据jar包存放位置进行相应更改
添加到chkconfig(Centos7下测试未果,使用下面的【添加开机启动】正常)
添加到chkconfig作为系统服务,并设置开机启动:
chkconfig --add /etc/init.d/stxzApi.sh (添加为系统服务)
chkconfig stxzApi.sh on (开机自启动)
service stxzApi.sh start(启动服务)
执行完成后重启,查看启动日志,可以看到该jar包程序已经作为守护进程在系统后台运行
附: Linux下chkconfig命令详解即添加服务以及两种方式启动关闭系统服务
添加开机启动
编辑
vi /etc/rc.d/rc.local
在最后一行添加你的脚本的绝对路径
touch /var/lock/subsys/local
/etc/rc.d/init.d start
设置rc.local 可执行权限
centos7下rc.local的权限被降低,需要手动为其赋予可执行权限
chmod +x /etc/rc.d/rc.local
reboot 重启下服务器看下结果,是否自动启动了jar包
Centos7查看已开启开机自动启动服务: chkconfig --list / systemctl list-dependencies
实际测试时用的启动jar脚本贴在此处参考:
#!/bin/sh
# chkconfig: 2345 85 15
# description:auto_run
export JAVA_HOME=/usr/local/java/jdk1.8.0_152
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#程序名
RUN_NAME="stxzApi.jar"
#jar 位置
JAVA_OPTS=/usr/local/app_jar/stxzApi.jar
LOG_OPTS=/usr/local/app_jar/logs/stxzApi_main.log
#开始方法
start() {
#测试环境使用这个
nohup java -Dfile.encoding=utf-8 -jar $JAVA_OPTS >$LOG_OPTS 2>&1 &
#生产环境指定为prod
#nohup java -jar -Dfile.encoding=utf-8 --spring.profiles.active=prod $JAVA_OPTS >$LOG_OPTS 2>&1 &
echo "$RUN_NAME started success 进程已启动成功,正在打开日志文件($LOG_OPTS),退出后将在后台运行:"
tail -f $LOG_OPTS
}
#结束方法
stop() {
echo "stopping $RUN_NAME ...(正在停止 $RUN_NAME...)"
kill -9 `ps -ef|grep $JAVA_OPTS|grep -v grep|grep -v stop|awk '{print $2}'`
echo "stoped $RUN_NAME ...(已停止 $RUN_NAME)"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac