安装SVN
安装subversion
yum -y install subversion
创建放置代码的文件夹并进入目录
mkdir -p /package/code cd /package/code
拉取代码
svn co <svn服务器路径> --username <your username> --password <your password>
安装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
使环境变量生效。
安装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
使环境变量生效。
安装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