Skip to content

脚本

部署后端

bash
#!/bin/bash
api_dir=/opt/temper/
api_jar=service-api.jar
api_all=$api_dir"$api_jar"
api_up=/opt/temper/upgrade/service-api.jar

cmc_dir=/opt/temper/
cmc_jar=service-cmc.jar
cmc_all=$cmc_dir"service-cmc.jar"
cmc_up=/opt/temper/upgrade/service-cmc.jar

gateway_dir=/opt/temper/
gateway_jar=service-gateway.jar
gateway_all=$gateway_dir"service-gateway.jar"
gateway_up=/opt/temper/upgrade/service-gateway.jar

process_dir=/opt/temper/
process_jar=service-process.jar
process_all=$process_dir"service-process.jar"
process_up=/opt/temper/upgrade/service-process.jar



dist_dir=/opt/temper/
dist_up=/opt/temper/upgrade/dist


if test -f "$api_up"; then
	cd $api_dir
	PID=$(ps -ef | grep $api_jar | grep -v grep | awk '{ print $2 }')
	kill -9 $PID
	mv service-api.jar service-api.jar_$(date +"%Y-%m-%d_%H:%M:%S")
	mv $api_up $api_dir
	nohup /usr/local/java/bin/java -Xms400m -Xmx400m -Xmn150m -Xss512k -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -server -jar -Dfile.encoding=utf-8  $api_all >/dev/null 2>&1 &
	echo $api_jar update success!
	else
	echo "$api_up not exist"
fi

if test -f "$process_up"; then
	cd $process_dir
	PID=$(ps -ef | grep $process_jar | grep -v grep | awk '{ print $2 }')
	kill -9 $PID
	mv service-process.jar service-process.jar_$(date +"%Y-%m-%d_%H:%M:%S")
	mv $process_up $process_dir
	nohup /usr/local/java/bin/java -Xms450m -Xmx450m -Xmn150m -Xss512k -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -server -jar -Dfile.encoding=utf-8 $process_all >/dev/null 2>&1 &
	echo $process_jar update success!
	else
	echo "$process_up not exist"
fi

if test -f "$cmc_up"; then
	cd $cmc_dir
	PID=$(ps -ef | grep $cmc_jar | grep -v grep | awk '{ print $2 }')
	kill -9 $PID
	mv service-cmc.jar service-cmc.jar_$(date +"%Y-%m-%d_%H:%M:%S")
	mv $cmc_up $cmc_dir
	nohup /usr/local/java/bin/java -Xms450m -Xmx450m -Xmn150m -Xss512k -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1024m -server -jar -Dfile.encoding=utf-8 $cmc_all >/dev/null 2>&1 &
	echo $cmc_jar update success!
	else
	echo "$cmc_up not exist"
fi

if test -f "$gateway_up"; then
	cd $gateway_dir
	PID=$(ps -ef | grep $gateway_jar | grep -v grep | awk '{ print $2 }')
	kill -9 $PID
	mv service-gateway.jar service-gateway.jar_$(date +"%Y-%m-%d_%H:%M:%S")
	mv $gateway_up $gateway_dir
	nohup /usr/local/java/bin/java -Xms150m -Xmx150m -Xmn100m -Xss512k -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -server -jar -Dfile.encoding=utf-8  $gateway_all >/dev/null 2>&1 &
	echo $gateway_jar update success!
	else
	echo "$gateway_up not exist"
fi

if [ -d "$dist_up" ];then
  cd $dist_dir
  mv dist dist_$(date +"%Y-%m-%d_%H:%M:%S")
  mv $dist_up $dist_dir
  echo dist update success!
  else
  echo "$dist_up not exist"
fi


count=`ps aux | grep service-api | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-api is run"
else
echo "service-api not run"
fi

count=`ps aux | grep service-cmc | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-cmc is run"
else
echo "service-cmc not run"
fi

count=`ps aux | grep service-process | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-process is run"
else
echo "service-process not run"
fi


count=`ps aux | grep service-gateway | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-gateway is run"
else
echo "service-gateway not run"
fi

部署前端

脚本功能:

  • 备份原文件夹,压缩成带时间戳的文件放到 bak 目录
  • 清空原目录
  • 拷贝新文件
  • 显示简单进度提示

假设目录结构如下:

  • 原目录:/usr/local/nginx/html/cool
  • 新文件:/root/upWebCool
  • 备份目录:/usr/local/nginx/html/bak
bash
#!/bin/bash

# 颜色定义
GREEN="\033[32m"
YELLOW="\033[33m"
RESET="\033[0m"

# 目标目录
TARGET_DIR="/usr/local/nginx/html/cool"
# 备份目录(假设已经存在)
BACKUP_DIR="/usr/local/nginx/html/bak"
# 新部署文件目录
SOURCE_DIR="/root/upWebCool"

# 时间戳
TIMESTAMP=$(date +"%Y%m%d%H%M%S")

echo -e "${GREEN}开始备份 ${YELLOW}$TARGET_DIR${GREEN} ...${RESET}"

if [ -d "$TARGET_DIR" ] && [ -n "$(ls -A "$TARGET_DIR")" ]; then
    BACKUP_FILE="$BACKUP_DIR/cool_backup_$TIMESTAMP.tar.gz"
    tar -czf "$BACKUP_FILE" -C "$TARGET_DIR" .
    echo -e "${GREEN}备份完成:${YELLOW}$BACKUP_FILE${RESET}"
else
    echo -e "${GREEN}目录 ${YELLOW}$TARGET_DIR${GREEN} 为空或不存在,跳过备份${RESET}"
fi

# 安全删除目标目录下的内容(带进度条)
if [ -d "$TARGET_DIR" ] && [ -n "$(ls -A "$TARGET_DIR")" ]; then
    echo -e "${GREEN}开始清理 ${YELLOW}$TARGET_DIR${GREEN} 下的文件和子目录...${RESET}"
    FILES=("$TARGET_DIR"/* "$TARGET_DIR"/.*)
    TOTAL=${#FILES[@]}
    COUNT=0
    for f in "${FILES[@]}"; do
        # 排除 . 和 ..
        [[ "$(basename "$f")" == "." || "$(basename "$f")" == ".." ]] && continue
        rm -rf "$f"
        COUNT=$((COUNT + 1))
        PERCENT=$((COUNT * 100 / TOTAL))
        echo -ne "${GREEN}清理进度: [${PERCENT}%] ${YELLOW}$f${RESET}\r"
    done
    echo -e "\n${GREEN}清理完成。${RESET}"
else
    echo -e "${GREEN}目录 ${YELLOW}$TARGET_DIR${GREEN} 为空,跳过清理${RESET}"
fi

# 拷贝新部署文件(带进度条)
if [ -d "$SOURCE_DIR" ] && [ -n "$(ls -A "$SOURCE_DIR")" ]; then
    echo -e "${GREEN}开始部署新文件...${RESET}"
    FILES=("$SOURCE_DIR"/*)
    TOTAL=${#FILES[@]}
    COUNT=0
    for f in "${FILES[@]}"; do
        cp -r "$f" "$TARGET_DIR"/
        COUNT=$((COUNT + 1))
        PERCENT=$((COUNT * 100 / TOTAL))
        echo -ne "${GREEN}部署进度: [${PERCENT}%] ${YELLOW}$f${RESET}\r"
    done
    echo -e "\n${GREEN}部署完成。${RESET}"

    # 清空 SOURCE_DIR 下的文件(带进度条)
    echo -e "${GREEN}清空源目录 ${YELLOW}$SOURCE_DIR${GREEN} ...${RESET}"
    FILES=("$SOURCE_DIR"/* "$SOURCE_DIR"/.*)
    TOTAL=${#FILES[@]}
    COUNT=0
    for f in "${FILES[@]}"; do
        [[ "$(basename "$f")" == "." || "$(basename "$f")" == ".." ]] && continue
        rm -rf "$f"
        COUNT=$((COUNT + 1))
        PERCENT=$((COUNT * 100 / TOTAL))
        echo -ne "${GREEN}清空进度: [${PERCENT}%] ${YELLOW}$f${RESET}\r"
    done
    echo -e "\n${GREEN}源目录已清空。${RESET}"
else
    echo -e "${GREEN}源目录 ${YELLOW}$SOURCE_DIR${GREEN} 为空,未部署任何文件${RESET}"
fi

echo -e "${GREEN}前端部署完成!${RESET}"

使用方法

  1. 保存为 deploy.sh

  2. 给执行权限:

    chmod +x deploy.sh
  3. 执行部署:

    ./deploy.sh

换行报错

使用 VSCode 或编辑器保存为 LF(Unix)格式

bash
打开 run_up_web.sh

在右下角选择 LF 而不是 CRLF

保存后再执行

bash run_up_web.sh
sh run_up_web.sh

文件大小

du:磁盘使用情况 -s:只显示总计 -h:人类可读

ts
// 查看目录大小
du -sh /path/to/directory

du -sh /usr/local/nginx/html/cool
ts
// 查看目录下每个文件和子目录的大小
du -sh /usr/local/nginx/html/cool/*

//查看当前目录下所有文件和目录大小排序
du -sh * | sort -h

日志监控

服务状态

bash
#!/bin/sh
# 查询软件依赖的全部中间件的启动状态
echo "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆Begin☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"

echo "--------------------------------start check middleware--------------------------------"
# mysql
count=`lsof -i tcp:3308 | grep -v "TYPE" | wc -l`
if [ $count -ne 0 ]; then
echo "mysql is run"
else
echo "mysql not run | systemctl start mysql8 "
fi

# redis
count=`ps aux | grep redis-server | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "redis is run"
else
echo "redis not run | "
fi

# nginx 
count=`ps aux | grep nginx | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "nginx is run"
else
echo "nginx not run"
fi


# influxdb
count=`lsof -i tcp:8086 | grep -v "TYPE" | wc -l`
if [ $count -ne 0 ]; then
echo "influxdb is run"
else
echo "influxdb not run"
fi

# TDengine
for i in app33 app34 app35
do
	ssh  $i  "count=`ps aux | grep taosd | grep -v 'grep' | wc -l`; if [ $count -ne 0 ]; then echo '$i,TDengine is run'; else echo 'TDengine not run'; fi"
done

# Rabbitmq
count=`ps aux | grep rabbitmq | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "Rabbitmq is run"
else
echo "Rabbitmq not run"
fi

# RocketMq
count=`ps ef | grep rocketmq | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "RocketMq is run"
else
echo "RocketMq not run"
fi

# Nacos
for i in app33 app34 app35
do
	ssh  $i  "count=`ps aux | grep nacos | grep -v 'grep' | wc -l`; if [ $count -ne 0 ]; then echo '$i,nacos is run'; else echo 'nacos not run'; fi"
done


# xxl-job
count=`lsof -i tcp:8085 | grep -v "TYPE" | wc -l`
if [ $count -ne 0 ]; then
echo "xxl-job is run"
else
echo "xxl-job not run"
fi

# Zabbix
count=`lsof -i tcp:9300 | grep -v "TYPE" | wc -l`
if [ $count -ne 0 ]; then
echo "Zabbix is run"
else
echo "Zabbix not run"
fi


echo "--------------------------------start check switch-service app--------------------------------"
# switch-service
count=`ps aux | grep switch-service | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "switch-service is run"
else
echo "switch-service not run"
fi

echo "--------------------------------start check temper-service app--------------------------------"
count=`ps aux | grep service-api | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-api is run"
else
echo "service-api not run"
fi

count=`ps aux | grep service-cmc | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-cmc is run"
else
echo "service-cmc not run"
fi

count=`ps aux | grep service-process | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-process is run"
else
echo "service-process not run"
fi


count=`ps aux | grep service-gateway | grep -v "grep" | wc -l`
if [ $count -ne 0 ]; then
echo "service-gateway is run"
else
echo "service-gateway not run"
fi

echo "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆End☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆"

设备状态

bash
#!/bin/bash
#系统简单巡检

cpu() {
        #us+sy 用户和系统进程消耗cpu百分比之和
        check_cpu=$(vmstat|awk '{if(NR==3) print$13+$14}')
        #磁盘io响应使用率
        check_io=$(vmstat|awk '{if(NR==3) print$16}')
        echo "CPU使用率为$check_cpu%, 磁盘io响应率为$check_io%"
}

memory() {
        #总内存,printf 是输出命令 %f格式化为小数,%.1f是后面保留1位小数。如: 1.0,这里/1024是将以G为单位显示
        total=$(free -m|awk '{if(NR==2)printf "%.1f",$2/1024 }')
        #内存使用量=总量-可用
        used=$(free -m|awk '{if(NR==2)printf "%.1f",($2-$NF)/1024 }')
        #可用
        available=$(free -m|awk '{if(NR==2)printf "%.1f",$NF/1024 }')
        echo "内存信息- 总大小为${total}G, 已使用:${used}G,剩余量为${available}G"

}
disk() {
        #只看根分区/ 和boot分区。所以要awk去匹配文件系统为/dev/开头的,下面devlist输出/,/boot
        #$1代表分区列,如/dev/sda1  $NF-最后一列(代表挂载点一列)如/  /boot
        devlist=$(df -h|awk '/^\/dev/{print $1}')
        for i in $devlist
        do
                mouted=$(df -h|awk -v i=$i '$1==i{print $NF}')
                size=$(df -h|awk -v i=$i '$1==i{print $2}')
                used=$(df -h|awk -v i=$i '$1==i{print $3}')
                use_free=$(df -h|awk -v i=$i '$1==i{print $5}')
                echo "硬盘信息- 挂载点: $mouted, 总大小: $size,已使用: $used,使用率:$use_free "
        done
}
tcp() {
    #$6是连接数那一列,将状态名存入awk设定的数组中作为key,数组取名s。++代表每遇到一个key,它的value会累加1,END结束,循环输出键值。
        netstat -antp|awk '{s[$6]++}END{for (i in s) print i,"当前连接数为" s[i]}'
}

main() {
    echo "——————————————————————————————【巡检开始】————————————————————————————"
    echo "☆☆☆☆☆☆☆☆☆☆CPU信息☆☆☆☆☆☆☆☆☆☆"
    cpu
    echo "☆☆☆☆☆☆☆☆☆☆内存信息☆☆☆☆☆☆☆☆☆☆"
    memory
    echo "☆☆☆☆☆☆☆☆☆☆磁盘信息☆☆☆☆☆☆☆☆☆☆"
    disk
    echo "☆☆☆☆☆☆☆☆☆☆TCP连接状态☆☆☆☆☆☆☆☆☆☆"
    tcp
    echo "——————————————————————————————【巡检结束】————————————————————————————"
}
main

启动所有中间件

bash
#!/bin/sh
# 启动软件依赖的全部中间件

echo "--------------------------------start beg--------------------------------"

cd /
chmod -R 777 opt

# mysql
echo "check mysql"
count=`lsof -i tcp:3308 | grep -v "TYPE" | wc -l`
echo $count
if [ $count -ne 0 ]; then
echo "mysql is run"
else
systemctl start mysql8&
fi

echo ""
# redis
echo "check redis"
count=`lsof -i tcp:6379 | grep -v "TYPE" | wc -l`
echo $count
if [ $count -ne 0 ]; then
echo "redis is run"
else
redis-server /etc/redis.conf &
fi

echo ""
# rabbitmq
echo "check rabbitmq"
count=`lsof -i tcp:15672 | grep -v "TYPE" | wc -l`
echo $count
if [ $count -ne 0 ]; then
echo "rabbitmq is run"
else
systemctl start rabbitmq-server.service
fi

echo ""
# influxdb
echo "check influxdb"
count=`lsof -i tcp:8086 | grep -v "TYPE" | wc -l`
echo $count
if [ $count -ne 0 ]; then
echo "influxdb is run"
else
systemctl start influxdb
fi


sleep 10
sh ./check.sh

同步集群节点

bash
#!/bin/bash
# 同步文件或目录到其他节点

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
	exit;
fi

#2. 遍历集群所有机器
for host in app33 app34 app35
do
	echo ====================  $host  ====================
	 #3. 遍历所有目录,挨个发送
	for file in $@
	do
		#4. 判断文件是否存在
		if [ -e $file ]
			then
				#5. 获取父目录
				pdir=$(cd -P $(dirname $file); pwd)
				#6. 获取当前文件的名称
				fname=$(basename $file)
	            ssh $host "mkdir -p $pdir"
				rsync -av $pdir/$fname $host:$pdir
			else
				echo $file does not exists!
		fi
	done
done

启动rocketmq

bash
#!/bin/bash
case $1 in
"start"){
	for i in app34 app35
	do
		echo " --------启动 $i rocketmq-------"
		ssh  $i  "service rocketmq start "
	done
	nohup java -jar /opt/module/rocketmq-console/rocketmq-dashboard.jar >./rocketmq-dashboard.log 2>&1 &
};;
"stop"){
	PID=$(ps -ef | grep rocketmq-dashboard.jar | grep -v grep | awk '{ print $2 }')
	if [ -z "$PID" ]
	then
	echo rocketmq-dashboard is already stopped
	else
	echo kill -9 $PID
	kill -9 $PID
	fi

	for i in app34 app35
	do
		echo " --------停止 $i rocketmq-------"
		ssh $i "service rocketmq stop "
	done
};;
"restart"){
	for i in app34 app35
	do
		echo " --------重启 $i rocketmq-------"
		ssh $i "service rocketmq restart "
	done
};;


esac
echo " --------over-------"