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