treenewbee 2022-05-12
  1. 安装SVN

    安装subversion

    yum -y install subversion
    

    创建放置代码的文件夹并进入目录

    mkdir -p /package/code
    cd /package/code
    

    拉取代码

    svn co <svn服务器路径> --username <your username> --password <your password>
    
  2. 安装maven

    下载maven安装包

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
    

    解压到指定目录并重命名

    tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/local
    mv apache-maven-3.6.3/ /usr/local/maven
    

    配置环境变量

    vim /etc/profile
    

    然后在末尾添加:

    export MAVEN_HOME=/usr/local/maven
    export PATH=$MAVEN_HOME/bin:$PATH
    

    保存并退出,然后键入:

    source /etc/profile 
    

    使环境变量生效。

  3. 安装JDK

    下载jdk RPM包并安装

    rpm -ivh jdk-8u333-linux-x64.rpm
    

    修改系统配置文件

    vim /etc/profile
    

    在末尾追加:

    export JAVA_HOME=/usr/java/jdk1.8.0_333-amd64/
    export PATH=$PATH:$JAVA_HOME/bin
    

    保存并退出,然后键入:

    source /etc/profile 
    

    使环境变量生效。

  4. 安装supervisor

    安装python

    yum install python-setuptools
    

    安装supervisor

    easy_install supervisor
    

    若执行提示Could not find suitable distribution for Requirement.parse('meld3>=0.6.5') 则安装meld

    wget https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91
    tar -zxvf meld3-1.0.2.tar.gz
    cd meld3-1.0.2
    python setup.py install
    

    查看是否安装成功,echo_supervisord_conf,如果有输出内容则表示成功

    ; Sample supervisor config file.
    ;
    ; For more information on the config file, please see:
    ; http://supervisord.org/configuration.html
    ;
    ; Notes:
    ;  - Shell expansion ("~" or "$HOME") is not supported.  Environment
    ;    variables can be expanded using this syntax: "%(ENV_HOME)s".
    ;  - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
    

    创建目录,初始化配置文件

    mkdir /usr/supervisor
    echo_supervisord_conf > /usr/supervisor/supervisord.conf
    

    新建文件夹,存放子配置文件

    mkdir /usr/supervisor/supervisord.d/
    

    修改配置文件

    vim /usr/supervisor/supervisord.conf
    

    [include]处改为如下所示:

    [include]
    files = /usr/supervisor/supervisord.d/*.conf
    

    去掉[inet_http_server]的注释,开启web查看进程

    [inet_http_server]
    port=127.0.0.1:9001   ;IP按需配置,127.0.0.1表示只能本地查看,改为0.0.0.0表示允许所有地方查看     
    username=user              
    password=123
    

    启动supervisor

    supervisord -c /usr/supervisor/supervisord.conf
    

    新增配置文件

    cat > /usr/supervisor/supervisord.d/register.conf
    

    在新增的配置文件中输入以下内容:

    #项目名
    [program:register]
    #脚本目录
    directory=/package/sh
    #脚本执行命令
    command=sh /package/sh/service.sh
    stopasgroup = true
    killasgroup = true
    #随着supervisor的启动而启动
    autostart=false
    #自动重启
    autorestart=false
    #子进程启动多少秒后,如果状态是running,则认为启动成功。默认值为1
    startsecs=10
    #脚本运行的用户身份
    user = root
    #日志输出(日志文件必须存在,否则启动报错)
    stderr_logfile=/package/cqsme-new/logs/cqsme-register-error.log
    stdout_logfile=/package/cqsme-new/logs/cqsme-register.log
    #把stderr重定向到stdout,默认 false
    redirect_stderr = false
    #stdout日志文件大小,默认 50MB
    stdout_logfile_maxbytes = 20MB
    #stdout日志文件备份数
    stdout_logfile_backups = 20
    

    新建执行脚本service.sh

    #!/bin/bash
    APP_NAME=cqsme-register # 应用名 
    APP_HOME=/package/cqsme-new/jar # 应用目录
    CODE_PATH=/package/code # 代码根路径
    CODE_APP_PATH=/package/code/cqsme-new # 应用代码路径
    JAR_PATH_FILE=$CODE_APP_PATH/$APP_NAME/target/$APP_NAME.jar # 应用编译生成的jar文件(全路径)
    LOG_PATH=/package/cqsme-new/logs #日志目录
    CODE_URL=<SVN_URL_OF_REPOSITORY>  #项目svn地址
    SVN_USER=<USER>                    #SVN用户
    SVN_PASSWORD=<PASSWORD>            #svn密码
    # 函数区
    log() {
     echo "------ $1 ------"
     sleep 1
    }
    svnupdate() {
     if [ ! -d $CODE_PATH ] ; then
         mkdir -p $CODE_PATH
     fi
     cd $CODE_PATH
     if [ ! -d $CODE_APP_PATH ] ; then
         log svn拉取代码
         svn co ${CODE_URL} --username ${SVN_USER} --password ${SVN_PASSWORD}
         cd $CODE_APP_PATH
     else
         cd $CODE_APP_PATH
         log svn更新代码
         svn update
     fi
    }
    mvnpackage() {
     log mvn打包
     mvn clean package -U -Dmaven.test.skip=true
     if [ $? -ne 0 ] ; then
         log mvn打包失败
         exit 2
     fi
    }
    checkappalive() {
     # 获取应用pid
     # root      781414  781413  0 11:07 ?        00:01:51 java -jar
     # 781414
     checkjavapid=`ps -ef | grep java | grep ${APP_NAME}.jar | awk '{print$2}'`
     if [[ $checkjavapid ]];then
         return 0
     else
         return 1
     fi
    }
    supervisorstop() {
     # log supervisor停止应用
     # supervisorctl stop $APP_NAME
     checkappalive
     if [ $? -ne 0 ];then
         log 应用尚未启动无需停止
         return 0
     fi
     for count in $(seq 12)
     do
         checkappalive
         if [ $? -eq 0 ];then
             log supervisor停止应用(尝试`expr $count`/3次)
             supervisorctl stop $APP_NAME
         else
             log supervisor停止应用完成
             return 0
         fi
         sleep 5
     done
     return 1
    }
    mvjar() {
     if [ ! -d $APP_HOME ] ; then
         mkdir -p $APP_HOME
     fi
     log 将jar移动至应用目录
     mv -f $JAR_PATH_FILE $APP_HOME
    }
    supervisorstart() {
     log supervisor启动应用
     #supervisorctl start $APP_NAME
     java -jar -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -verbose:gc -Xloggc:$LOG_PATH/$APP_NAME/$APP_NAME.gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_PATH/$APP_NAME/$APP_NAME.oom.hprof -Dspring.profiles.active=test $APP_HOME/$APP_NAME.jar
    }
    # 执行区
    svnupdate
    mvnpackage
    mvjar
    supervisorstart
    

    重启supervisor

    #打开supervisorctl控制台
    supervisorctl -c /usr/supervisor/supervisord.conf
    #输入命令
    #update 更新新的配置到supervisord(不会重启原来已运行的程序)
    #reload 载入所有配置文件,并按新的配置启动、管理所有进程(会重启原来已运行的程序)
    #start xxx: 启动某个进程
    #restart xxx: 重启某个进程
    #stop xxx: 停止某一个进程(xxx),xxx为[program:theprogramname]里配置的值
    #stop groupworker: 重启所有属于名为groupworker这个分组的进程(start,restart同理)
    #stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文
    #reread,当一个服务由自动启动修改为手动启动时执行一下就ok
    #help                查询所有命令
    reload
    y
    

    访问web进程

    http://ip:9001
    

参考文章:

Supervisor安装与配置教程

详解Supervisor进程守护监控

supervisor入门

登录写评论