假设当前项目的名称为 osmp
1、在 Linux 服务器上创建一个新的账户, 账户名为 dev
。该账户主要用户部署程序
2、在 ~ 目录(用户的根目录)下,新建 osmp
文件夹,在 osmp
下新建 deploy
文件夹
# op、office、meeting 为模块名, app.sh 为服务器自动部署脚本。apm 为链路监控的固定文件夹。
~
|-- osmp
|-- deploy
|-- apm
|-- agent
|-- skywalking-agent.jar
|-- op
|-- app.sh
|-- office
|-- app.sh
|-- meeting
|-- app.sh
一、服务器执行脚本( app.sh
)
app.sh
的内容如下,修改 SERVICE_NAME 与当前文件夹的名称相同。
SERVICE_NAME=op
JAR=$SERVICE_NAME-web
start() {
echo "=============================start=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Application is already running, PID is $PID"
else
nohup java -javaagent:/dev/osmp/deploy/apm/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$SERVICE_NAME -Dskywalking.collector.backend_service=10.14.2.27:11800 -jar $JAR.jar >/dev/null 2>&1 &
echo "Application has run by skywalking-agent!!!"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Start Application successfully, PID is $PID"
else
echo "Failed to start Application!!!"
fi
fi
echo "=============================start=============================="
}
stop() {
echo "=============================stop=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
kill -15 $PID
sleep 5
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Stop Application failed by kill -15 $PID, begin to kill -9 $PID"
kill -9 $PID
sleep 2
echo "Stop Application successfully by kill -9 $PID"
else
echo "Stop Application successfully by kill -15 $PID"
fi
else
echo "Application is not running!!!"
fi
echo "=============================stop=============================="
}
restart() {
echo "=============================restart=============================="
stop
start
echo "=============================restart=============================="
}
status() {
echo "=============================status=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Application is running, PID is $PID"
else
echo "Application is not running!!!"
fi
echo "=============================status=============================="
}
info() {
echo "help: help info"
}
help() {
echo "start: start server"
echo "stop: shutdown server"
echo "restart: restart server"
echo "status: display status of server"
echo "info: display info of server"
echo "help: help info"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
info)
info
;;
help)
help
;;
*)
help
;;
esac
exit $?
sh 中命令, 使用 ./app.sh start
来启动
- ./app.sh start
- ./app.sh stop
- ./app.sh restart
- ./app.sh status
## app.sh
JAR=op-gdbh-web
SERVICE_NAME=op_gdbh
JAVA_OPTS=" -Xms256M -Xmx512M"
start() {
echo "=============================start=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Application is already running, PID is $PID"
else
nohup java $JAVA_OPTS -javaagent:/home/admin/osmp_deploy/ytgz/apm/agent/skywalking-agent.jar -Dskywalking.agent.service_name=$SERVICE_NAME -Dskywalking.collector.backend_service=10.14.2.183:11800 -jar $JAR.jar >/dev/null 2>&1 &
echo "Application has run by skywalking-agent!!!"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Start Application successfully, PID is $PID"
else
echo "Failed to start Application!!!"
fi
fi
echo "=============================start=============================="
}
stop() {
echo "=============================stop=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
kill -15 $PID
sleep 5
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Stop Application failed by kill -15 $PID, begin to kill -9 $PID"
kill -9 $PID
sleep 2
echo "Stop Application successfully by kill -9 $PID"
else
echo "Stop Application successfully by kill -15 $PID"
fi
else
echo "Application is not running!!!"
fi
echo "=============================stop=============================="
}
restart() {
echo "=============================restart=============================="
stop
start
echo "=============================restart=============================="
}
status() {
echo "=============================status=============================="
PID_CMD="ps -ef | grep $JAR | grep -v grep | awk '{print \$2}'"
PID=$(eval $PID_CMD)
if [[ -n $PID ]]; then
echo "Application is running, PID is $PID"
else
echo "Application is not running!!!"
fi
echo "=============================status=============================="
}
info() {
echo "help: help info"
}
help() {
echo "start: start server"
echo "stop: shutdown server"
echo "restart: restart server"
echo "status: display status of server"
echo "info: display info of server"
echo "help: help info"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
status
;;
info)
info
;;
help)
help
;;
*)
help
;;
esac
exit $?
二、本地部署脚本 (deploy.bat
)
本地安装 putty
,并 putty
安装路径加入到环境变量。
将 deploy.bat
放在 web工程的根目录。执行 bat 文件,将会自动打包部署。
# 工程的目录结构
|-- osmp
|-- op
|-- op-web
|-- deploy.bat
deploy.bat
的内容如下
@echo off
:: 需要设置服务器的 ip、密码、服务名
set User=dev
set IP=???, 如 10.14.2.172
set PassWd=???
set Service=??? 如 op
plink %User%@%IP% -pw %PassWd% "cd /dev/osmp/deploy/%Service%;ls"
call mvn clean compile package -DskipTests
pscp -l root -pw %PassWd% op-web/target/%Service%-web.jar %IP%:/root/osmp_deploy/%Service%/%Service%-web.jar.deploying
plink %User%@%IP% -pw %PassWd% "cd /dev/osmp/deploy/%Service%;./app.sh stop"
plink %User%@%IP% -pw %PassWd% "cd /dev/osmp/deploy/%Service%;mv %Service%-web.jar %Service%-web.jar.old;mv %Service%-web.jar.deploying %Service%-web.jar"
plink %User%@%IP% -pw %PassWd% "cd /dev/osmp/deploy/%Service%;./app.sh start"
plink %User%@%IP% -pw %PassWd% "cd /dev/osmp/deploy/%Service%;./app.sh status"
pause