DATE
=
$
(
date
+
%
Y
%
m
%
d
%
H
%
M
)
# 基础路径
BASE_PATH
=
/
home
/
mico
-
service
-
gateway
# 编译后 jar包 的地址
SOURCE_PATH
=
$
BASE_PATH
/
build
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME
=
mico
-
service
-
gateway
-
0.0
.1
-
RELEASE
.
jar
# 健康检查
URL
#
HEALTH_CHECK_URL
=
http
:
/
/
127.0
.0
.1
:
8078
/
actuator
/
health
/
HEALTH_CHECK_URL
=
# heapError 存放路径
HEAP_ERROR_PATH
=
$
BASE_PATH
/
heapError
#
JVM
参数
JAVA_OPS
=
"-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"
# JavaAgent 参数。可用于配置 SkyWalking 等链路追踪
JAVA_AGENT
=
function
backup
(
)
{
# 如果不存在,则无需备份
if
[
!
-
s $
BASE_PATH
/
$
SERVER_NAME
]
;
then
echo
"[backup] $BASE_PATH/$SERVER_NAME 不存在,跳过备份"
# 如果存在,则备份到 backup 目录下,使用时间作为后缀
echo
"[backup] 开始备份 $SERVER_NAME ..."
if
[
!
-
d $
BASE_PATH
/
backup
]
;
then
mkdir
-
p $
BASE_PATH
/
backup
cp
-
rf $
BASE_PATH
/
$
SERVER_NAME
$
BASE_PATH
/
backup
/
$
SERVER_NAME
-
$
DATE
echo
"[backup] 备份 $SERVER_NAME 完成"
# 最新构建代码 移动到项目环境
function
transfer
(
)
{
echo
"[transfer] 开始转移 $SERVER_NAME"
# 删除原 jar 包
if
[
!
-
s
"$BASE_PATH/$SERVER_NAME"
]
;
then
echo
"[transfer] $BASE_PATH/$SERVER_NAME 不存在,跳过删除"
echo
"[transfer] 移除 $BASE_PATH/$SERVER_NAME 完成"
rm
-
rf $
BASE_PATH
/
$
SERVER_NAME
;
# 复制新 jar 包
echo
"[transfer] 从 $SOURCE_PATH 中获取 $SERVER_NAME 并迁移至 $BASE_PATH ...."
cp
-
rf $
SOURCE_PATH
/
$
SERVER_NAME
$
BASE_PATH
echo
"[transfer] 转移 $SERVER_NAME 完成"
function
stop
(
)
{
echo
"[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
PID
=
$
(
ps
-
ef
|
grep $
BASE_PATH
/
$
SERVER_NAME
|
grep
-
v
"grep"
|
awk
'{print $2}'
)
# 如果 Java 服务启动中,则进行关闭
if
[
-
n
"$PID"
]
;
then
# 正常关闭
echo
"[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
kill
-
15
$
PID
# 等待最大
60
秒,直到关闭完成。
for
(
(
i
=
0
;
i
<
60
;
i
++
)
)
sleep
1
PID
=
$
(
ps
-
ef
|
grep $
BASE_PATH
/
$
SERVER_NAME
|
grep
-
v
"grep"
|
awk
'{print $2}'
)
if
[
-
n
"$PID"
]
;
then
echo
-
e
".\c"
echo
'[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
break
# 如果正常关闭失败,那么进行强制 kill
-
9
进行关闭
if
[
-
n
"$PID"
]
;
then
echo
"[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
kill
-
9
$
PID
# 如果 Java 服务未启动,则无需关闭
echo
"[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
function
start
(
)
{
# 开启启动前,打印启动参数
echo
"[start] 开始启动 $BASE_PATH/$SERVER_NAME"
echo
"[start] JAVA_OPS: $JAVA_OPS"
echo
"[start] JAVA_AGENT: $JAVA_AGENT"
# 开始启动
BUILD_ID
=
dontKillMe nohup java
-
server $
JAVA_OPS
$
JAVA_AGENT
-
jar $
BASE_PATH
/
$
SERVER_NAME
&
sleep
3
PID
=
$
(
ps
-
ef
|
grep
"$BASE_PATH/$SERVER_NAME"
|
grep
-
v grep
|
awk
'{ print $2 }'
)
echo
"[start] 启动 $BASE_PATH/$SERVER_NAME 完成,服务进程:$PID"
# 健康检查
function
healthCheck
(
)
{
# 如果配置健康检查,则进行健康检查
if
[
-
n
"$HEALTH_CHECK_URL"
]
;
then
# 健康检查最大
60
秒,直到健康检查通过
echo
"[healthCheck] 开始通过 $HEALTH_CHECK_URL 地址,进行健康检查"
;
for
(
(
i
=
0
;
i
<
60
;
i
++
)
)
# 请求健康检查地址,只获取状态码。
result
=
`curl -I -m 10 -o /dev/null -s -w %{http_code} $HEALTH_CHECK_URL || echo "000"`
# 如果状态码为
200
,则说明健康检查通过
if
[
"$result"
==
"200"
]
;
then
echo
"[healthCheck] 健康检查通过"
;
break
# 如果状态码非
200
,则说明未通过。sleep
1
秒后,继续重试
echo
-
e
".\c"
sleep
1
# 健康检查未通过,则异常退出 shell 脚本,不继续部署。
if
[
!
"$result"
==
"200"
]
;
then
echo
"[healthCheck] 健康检查不通过,可能部署失败。查看日志,自行判断是否启动成功"
;
tail
-
n
10
nohup
.
out
exit
1
;
# 健康检查通过,打印最后
10
行日志,可能部署的人想看下日志。
tail
-
n
10
nohup
.
out
# 如果未配置健康检查,则 slepp
1
秒,人工看日志是否部署成功。
echo
"[healthCheck] HEALTH_CHECK_URL 未配置,通过进程查询健康检查 开始 sleep 1 秒"
;
sleep
1
ps
-
ef
|
grep $
BASE_PATH
/
$
SERVER_NAME
|
grep
-
v grep
if
[
$
?
-
ne
0
]
echo
"[healthCheck] 目前服务进程已存在,暂定认为启动成功,查看日志,确定是否启动成功"
;
echo
"[healthCheck] 目前未发现服务进程,启动失败,请查看日志,自行判断是否启动成功"
;
tail
-
10
f nohup
.
out
#回退jar包
function
jarRollBack
(
)
{
echo
"[rollBack]回退开始 jar包为:`ls -l $BASE_PATH/backup| tail -n 1 | awk '{print $9}'`"
#获取最新的jar包
fileName
=
`ls -l $BASE_PATH/backup | tail -n 1 | awk '{print $9}'`
;
#删除当前jar包
,
检查jar包是否存在,不存在,无需删除
if
[
!
-
s $
BASE_PATH
/
$
SERVER_NAME
]
;
then
echo
"[rollBack]jar包回退,发现真实jar包不存在,跳过删除操作"
rm
-
rf $
BASE_PATH
/
$
SERVER_NAME
;
#将最新jar包回归原位,待重新启动做准备
cp
-
rf $
BASE_PATH
/
backup
/
$fileName $
BASE_PATH
/
$
SERVER_NAME
;
echo
"[rollBack]jar包回退完毕 "
function
deploy
(
)
{
# cd $
BASE_PATH
# 备份原 jar
backup
# 停止 Java 服务
# 部署新 jar
transfer
# 启动 Java 服务
start
# 健康检查
healthCheck
function
rollback
(
)
{
cd $
BASE_PATH
# 停止 Java 服务
# jar 包回退
jarRollBack
# 启动 Java 服务
start
# 健康检查
healthCheck
if
[
$#
-
ne
1
]
echo
"服务一键启动或回退发生未知异常,偷偷告诉你:小子,动机不存,口令缺失"
exit
1
# 如果是发布命令,则部署吧
if
[
"$1"
=
"deploy"
]
deploy
;
exit
1
# 如果是回退命令,则回退吧
if
[
"$1"
=
"rollback"
]
rollback
;
exit
1
echo
"小子,干啥呢?果真动机不存,是想进局子吧?"
exit
1
;
linux 服务一键更新回滚发布shell脚本#!/bin/bashset -eDATE=$(date +%Y%m%d%H%M)# 基础路径BASE_PATH=/home/mico-service-gateway# 编译后 jar包 的地址SOURCE_PATH=$BASE_PATH/build# 服务名称。同时约定部署服务的 jar 包名字也为它。SERVER_NAME=mico-service-gateway-0.0.1-RELEASE.jar# 健康检查 URL#HEALTH_
平台前端文件的升级与
回滚
平时工作时不时需要替换正式和内测环境的前端文件,
服务
器通过堡垒机登录,可上传文件到 /tmp 目录,而且有多个平台路径,所以编写以下
脚本
,用于工作
#!/bin/bash
# author: zhangsx
# info: 平台前端文件升级
回滚
脚本
DATE=$(date +%Y%m%d_%H%M%S)
TEST01=/data/html01 # 平台前端文件根目录
TEST02=/data/html02
TEST03=/da
俗话说的好:“真男人从来不
回滚
”,但是家中常备一个
回滚
脚本
也是很有必要的,我所在公司的
服务
器模块名都是在初始化的时候写进/etc/role_install这个文件里,如下图的这个
服务
器就是fss
服务
器:再比如下面这个
服务
器,虽然包含nginx的组件但是httpproxy的
服务
器:那么有了这样的前提,整个
回滚
的
脚本
内容如下:#!/bin/bash
#WrittenbyChr...
现在每次
发布
的时候,都要求备份当前线上能运行的分支,很是麻烦,很多时候都会忘记。所以写了一个
脚本
无论在哪个分支,都可以切回rollback 分支,然后在这个分支拉取远程master 代码,备份。然后再切回来。
如果权限足够的话,可以直接写在
发布
脚本
中,在
发布
之前自动备份
# backup.sh
# 执行 git status 指令,并将无代码修改的这种状况进行筛选 。| grep "" 是匹配字符串并将这一行截取
status=`git status | grep "working tree clean"
脚本
功能使用该
脚本
完成SOA工程的全量
更新
、增量
更新
、全量
回滚
等操作。自动部署流程 3.
脚本
代码#!/usr/bin/python
#coding=utf-8
importsys,os,re,time,commands,logging
work_dir='/data/company/soa'
package_dir='/data/package/soa'
updat...
### 回答1:
回答:可以使用
shell
脚本
来实现jar包的启动、停止、
更新
和
回滚
功能。可以编写一个
脚本
,其中包括启动和停止jar包的命令,
更新
jar包的命令,以及
回滚
到特定版本的命令。例如:# 启动jar包
java -jar myJar.jar# 停止jar包
pkill -f myJar.jar#
更新
jar包
wget -O myJar.jar http://www.example.com/myJar.jar#
回滚
jar包
wget -O myJar.jar http://www.example.com/myJar_old.jar
### 回答2:
下面是一个简单的
shell
脚本
示例,用于实现jar包的启动、停止、
更新
和
回滚
功能:
```bash
#!/bin/bash
# 配置变量
JAR_FILE="myapp.jar"
PID_FILE="pid.txt"
BACKUP_DIR="backup"
# 启动函数
start() {
if [ -f $PID_FILE ]; then
echo "应用已经在运行中."
nohup java -jar $JAR_FILE > /dev/null 2>&1 &
echo $! > $PID_FILE
echo "应用已启动."
# 停止函数
stop() {
if [ -f $PID_FILE ]; then
kill $(cat $PID_FILE)
rm $PID_FILE
echo "应用已停止."
echo "应用未运行."
#
更新
函数
update() {
if [ -f $PID_FILE ]; then
backup_time=$(date +"%Y%m%d%H%M%S")
backup_file="$BACKUP_DIR/$JAR_FILE.$backup_time"
cp $JAR_FILE $backup_file
echo "已备份当前版本."
mv new_version.jar $JAR_FILE
echo "
更新
完成."
echo "应用未运行."
#
回滚
函数
rollback() {
latest_backup=$(ls -t $BACKUP_DIR/$JAR_FILE.* | head -n 1)
if [ -f $latest_backup ]; then
cp $latest_backup $JAR_FILE
echo "已
回滚
到上一个备份版本."
echo "未找到备份文件."
# 主程序
case "$1" in
start)
start
stop)
update)
update
rollback)
rollback
echo "用法: $0 {start|stop|update|rollback}"
exit 1
请注意,以上
脚本
仅提供一个简单的示例,具体根据实际情况可能需要进行修改和调整。
### 回答3:
以下是一个使用
shell
脚本
实现jar包启动、停止、
更新
和
回滚
功能的示例:
```bash
#!/bin/bash
# 设置jar包路径
JAR_PATH="/path/to/your/jar/file.jar"
# 设置启动命令
START_COMMAND="java -jar $JAR_PATH"
# 设置备份文件夹路径
BACKUP_FOLDER="/path/to/your/backup/folder"
# 设置备份文件名
BACKUP_FILE="backup-$(date +%Y%m%d%H%M%S).jar"
# 启动函数
start() {
if pgrep -f $JAR_PATH > /dev/null; then
echo "Jar包已在运行中."
echo "启动Jar包..."
$START_COMMAND &
echo "Jar包已启动."
# 停止函数
stop() {
if pgrep -f $JAR_PATH > /dev/null; then
echo "停止Jar包..."
kill $(pgrep -f $JAR_PATH)
echo "Jar包已停止."
echo "Jar包未运行."
#
更新
函数
update() {
if pgrep -f $JAR_PATH > /dev/null; then
echo "停止Jar包..."
kill $(pgrep -f $JAR_PATH)
echo "Jar包已停止."
echo "备份Jar包..."
cp $JAR_PATH $BACKUP_FOLDER/$BACKUP_FILE
echo "开始
更新
..."
# 执行
更新
操作,如下载最新的jar包到JAR_PATH路径下
echo "启动
更新
后的Jar包..."
$START_COMMAND &
echo "
更新
完成."
#
回滚
函数
rollback() {
if pgrep -f $JAR_PATH > /dev/null; then
echo "停止Jar包..."
kill $(pgrep -f $JAR_PATH)
echo "Jar包已停止."
LATEST_BACKUP=$(ls -t $BACKUP_FOLDER | head -n 1)
if [ -z "$LATEST_BACKUP" ]; then
echo "没有可用的备份文件."
exit 1
echo "恢复备份文件 $LATEST_BACKUP..."
cp $BACKUP_FOLDER/$LATEST_BACKUP $JAR_PATH
echo "启动
回滚
后的Jar包..."
$START_COMMAND &
echo "
回滚
完成."
# 主函数
main() {
case "$1" in
start)
start
stop)
update)
update
rollback)
rollback
echo "Usage: $0 {start|stop|update|rollback}"
exit 1
# 执行主函数
main "$@"
以上
脚本
使用`JAR_PATH`变量设置jar包的路径,`START_COMMAND`变量设置启动命令,`BACKUP_FOLDER`变量设置备份文件夹的路径。在启动、停止、
更新
和
回滚
函数中,根据需要执行相应的操作。启动和停止函数使用`pgrep`命令检查jar包进程是否在运行并执行相应的操作。
更新
函数备份当前的jar包文件,执行
更新
操作,然后启动
更新
后的jar包。
回滚
函数从备份文件夹中获取最新的备份文件,恢复为原始的jar包文件,然后启动
回滚
后的jar包。最后,通过命令行参数选择执行相应的操作。