Spring Boot jar包 Centos7.5 部署的三种方式 sh、service、systemctl

原创
2018/10/29 17:27
阅读数 3.4K

方式一 sh 脚本启动

参考:https://blog.csdn.net/vakinge/article/details/78706679

启动脚本start.sh

#!/bin/sh

rm -f tpid
nohup java -Xms1536m -Xmx1536m -jar /appsystems/IFC/apps/ifc-0.0.1-SNAPSHOT.jar --spring.config.location=/appsystems/IFC/config/application.properties > /applogs/IFC/launch.log 2>&1 &
echo $! > tpid
echo Start Success!

关闭脚本stop.sh

#!/bin/sh
APP_NAME=service-wxcp-0.0.1-SNAPSHOT

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Stop Process...'
    kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

重启脚本:

#!/bin/bash
echo stop application
source stop.sh
echo start application
source start.sh

集成版本:
 

#!/bin/bash
#
# chkconfig:   - 20 80
# description: Starts and stops the App.
# author:vakinge

ENV=dev
RUNNING_USER=vakinge
ADATE=`date +%Y%m%d%H%M%S`
APP_NAME=passport-server

APP_HOME=`pwd`
dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
   APP_HOME=`dirname $0`
else
    dirname $0|grep "^\." >/dev/null
    retval=$?
    if [ $retval -eq 0 ];then
        APP_HOME=`dirname $0|sed "s#^.#$APP_HOME#"`
    else
        APP_HOME=`dirname $0|sed "s#^#$APP_HOME/#"`
    fi
fi

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

LOG_PATH=$APP_HOME/logs/$APP_NAME.out
GC_LOG_PATH=$APP_HOME/logs/gc-$APP_NAME-$ADATE.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"

JAR_FILE=$APP_NAME.jar
pid=0
start(){
  checkpid
  if [ ! -n "$pid" ]; then
    JAVA_CMD="nohup java -jar $JVM_OPTS $JAR_FILE > $LOG_PATH 2>&1 &"
    su - $RUNNING_USER -c "$JAVA_CMD"
    echo "---------------------------------"
    echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
    echo "---------------------------------"
    sleep 2s
    tail -f $LOG_PATH
  else
      echo "$APP_NAME is runing PID: $pid"   
  fi

}


status(){
   checkpid
   if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
   else
     echo "$APP_NAME runing PID: $pid"
   fi 
}

checkpid(){
    pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}

stop(){
    checkpid
    if [ ! -n "$pid" ]; then
     echo "$APP_NAME not runing"
    else
      echo "$APP_NAME stop..."
      kill -9 $pid
    fi 
}

restart(){
    stop 
    sleep 1s
    start
}

case $1 in  
          start) start;;  
          stop)  stop;; 
          restart)  restart;;  
          status)  status;;   
              *)  echo "require start|stop|restart|status"  ;;  
esac 

 

方式二 service 命令启动

参考:https://www.cnblogs.com/zhengshiqiang47/p/8119944.html

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

首先在spring boot工程的pom.xml 文件中添加上述修改

mavn 命令打包

clean package -Dmaven.test.skip=true

sftp 上传到 linux 服务器上

在linux环境中,可以为该jar包添加执行权限,类似chmod a+x xxx.jar

使用ln -s 命令添加软链接:
ln -s /path/to/your.jar /etc/init.d/yourappname

添加完成后,即可直接使用service命令:
service yourappname start/stop/status

遇到问题

[root@instance-lzteipxa ~]# service mylayui-0.0.1-SNAPSHOT start
Unable to find Java

原因系统中安装的是 tar.gz 版本 JDK是解压安装,路径安装在了/home/jun/jdk/jdk/jdk1.8.0_192,虽然配置了环境变量,但是 service 程序在/usr/bin下去找JDK的安装信息,需要将JDK指定为系统默认的JDK。

update-alternatives是 linux 系统中专门维护系统命令链接符的工具,通过它可以很方便的设置系统默认使用哪个命令、哪个软件版本,比如,我们在系统中同时安装了open jdk和sun jdk两个版本,而我们又希望系统默认使用的是sun jdk,那怎么办呢?通过update-alternatives就可以很方便的实现了。
执行下面三行代码

sudo update-alternatives --install "/usr/bin/java" "java" "/home/leon/lib/jdk/jdk1.7.0_79/bin/java" 300
sudo update-alternatives --install "/usr/bin/javac" "javac" "/home/leon/lib/jdk/jdk1.7.0_79/bin/javac" 300
sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/home/leon/lib/jdk/jdk1.7.0_79/bin/javaws" 300
update-alternatives --config java
 
update-alternatives --config javac
 
update-alternatives --config javaws

方法三 systemctl 命令启动

参考:https://blog.csdn.net/zeroctu/article/details/76538416

一. 关于systemctl的基本命令参考:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

二. 写service配置,两种方式:设定working目录,springboot会在working目录下寻找application.yml加载;不设定working目录,指定springboot配置文件 
2.1 设定working目录:
 

vim /usr/lib/systemd/system/wxcp.service
[Unit]
Description=test 

[Service]
WorkingDirectory=/usr/local/test
PrivateTmp=true
Restart=always
Type=simple
ExecStart=/usr/local/java/jdk1.8.0_101/bin/java -jar /usr/local/test/test.jar --spring.config.location=/usr/local/test/application.yml
ExecStop=/usr/bin/kill -15  $MAINPID

[Install]
WantedBy=multi-user.target

三. systemctl 管理,让配置生效。若是修改配置文件,需要reload:

sudo systemctl daemon-reload

 

sudo systemctl enable test.service

启动服务

systemctl start test.service

四. 在CentOS 7 / RHEL 7的系统中,使用Systemd替代了之前的SysV,因此 /etc/security/limits.conf 文件的配置作用域缩小了一些。limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,对systemd的service的资源限制不生效,所以这里需要在[Service]中配置limits:

[Service]
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=100000

运行命令使其生效:

systemctl daemon-reload
systemctl restart test.service

查看该进程的limits:

cat /proc/PID/limits

systemd官方文档: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Services.html

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部