当前位置: 首页 > news >正文

个人shell脚本分享

在周一到周五做增量备份,在周六周日做完全备份


#!/bin/bash

定义变量

SRC=“/path/to/source” # 源目录
BKUP=“/backup” # 备份主目录
FUL=“KaTeX parse error: Expected 'EOF', got '#' at position 22: …ull" #̲ 完全备份目录 INC="BKUP/inc” # 增量备份目录
DATE=$(date +%Y%m%d%H%M%S) # 当前日期时间

创建备份目录

mkdir -p $FUL
mkdir -p $INC

获取当前日期

DOW=$(date +%u) # 1=Monday, 7=Sunday

获取最近一次完全备份

LAST_FUL=$(ls -t $FUL | head -n 1)

完全备份

if [ $DOW -eq 6 ] || [ $DOW -eq 7 ]; then

cp -a $SRC $FUL/$DATE

else
# 增量备份
if [ -z “$LAST_FUL” ]; then

    cp -a $SRC $FUL/$DATE
fi

fi

实现从代码仓库拉取最新代码、构建、测试、部署到生产环境的自动化流程


  #!/bin/bash
read -p "输入git仓库名" a
git_url=$a
read -p "输入存放目录" b
git_dir=$b

if [ ! -d “ g i t d i r " ] t h e n r e a d − p " 是否创建目录,输入 y 或 n " c c a s e " {git_dir}" ] then read -p "是否创建目录,输入y或n" c case " gitdir"]thenreadp"是否创建目录,输入yn"ccase"c” in
y)
mkdir g i t d i r ; ; n ) e x i t 1 ; ; ∗ ) e c h o " 请输入选择 " ; ; e s a c g i t c l o n e " {git_dir} ;; n) exit 1 ;; *) echo "请输入选择" ;; esac git clone " gitdir;;n)exit1;;)echo"请输入选择";;esacgitclone"git_url" “$git_dir”
else
cd ${git_dir}
git pull origin master
fi
cd ${git_dir}
#要执行的代码脚本写这

检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%


d_log=${d}.log
d_block=${d}block.log
for i in $(df -i | grep -v "IFree" | awk '{print $5}' | cut -d "%" -f 1)
do
        df -i >> /tmp/$d_log
        if [ "$i" -ge 1 ]
        then
                 mail -s "title" root < /tmp/$d_log
        fi

done

for i in $(df -h | grep -v “Use” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 5}̲' | cut -d "%" …d_block
if [ " i " − g e 1 ] t h e n m a i l − s " t i t l e " r o o t < / t m p / i" -ge 1 ] then mail -s "title" root < /tmp/ i"ge1]thenmails"title"root</tmp/d_block
fi

done

一个巡检脚本,用来检测系统里面所有服务是否都正常运行假定,系统运行的服务有Nginx、MySQL、Redis、Tomcat要求脚本有内容输出,可以明确告知服务是否正常运行。提示:1)如果服务进程存在并且端口监听说明服务正常


 #!/bin/bash


#判断ss和pgrep是否存在 

check_tools () {
if ! which pgrep &>/dev/null
then
        echo "没有pgrep命令"
        exit 1
fi

if ! which ss &>/dev/null
then
        echo "没有pgrep命令"
        exit 1
fi

}

#判断进程是否存在可以用ps aux | grep 服务名  
check_pid (){
 if pgrep "$1" &>/dev/null
 then
        return 0
 else
        return 1
 fi
}


#判断端口是否存在
check_port (){
#统计端口的行数
port=$(ss -npl|grep ":$2"|wc -l)
 if [ "$port" -ne "0" ] &>/dev/null
 then
        return 0
 else
        return 1
 fi

}
#判断端口和经常是否同时存在来判断服务是否正常
check_srv (){
if check_pid "$1" && check_port "$2"
then
        echo "$1正常"
else
        echo "$1不正常"

fi
}

check_tools
#输入相应服务和端口
check_srv ssh 22

一个监控脚本,监控某站点访问是否正常


    #!/bin/bash

#检查本机有没有curl命令
if ! which curl &>/dev/null
then
        echo "没有安装curl"
        yum -y install curl
        if [ "$?" -ne "0" ]
        then
                echo "没有curl"
                exit
        fi
fi
#获取状态码
code=$(curl 3 -I $1 2>/dev/null | grep "HTTP" | awk '{print $2}')
#判断状态码是否正确
if echo $code | egrep -q "^2[0-9][0-9]|^3[0-9][0-9]"
then
        echo "$1访问正常"
else
        echo "$1访问不正常"
fi


写一个检测脚本,用来检测本机所有磁盘分区读写是否都正常。提示: 可以遍历所有挂载点,然后新建一个测试文件,然后再删除测试文件,如果可以正常新建和删除,那说明该分区没问题


#!/bin/bash

for mount_p in $(df -h | grep -v Size | grep -v tmpfs | awk '{print $NF}')
do

        touch $mount_p/dir && rm -rf $mount_p/dir
        if [ "$?" -eq "0" ]
        then
                echo "读写没问题"
        else
                echo "读写有问题"
        fi
done


自动部署更新服务脚本(流程是:停止并删除旧容器,删除旧镜像,拉取新镜像,运行新容器)


#!/bin/bash

# 接收脚本参数
# $1: Harbor仓库地址,例如192.168.1.100:5000
harbor_url=$1
# $2: Harbor中的项目名称,例如devops-project
harbor_project_name=$2
# $3: 项目/应用名称,例如user-service
project_name=$3
# $4: 镜像标签版本,例如v1.2.0
tag=$4
# $5: 容器端口映射,例如8080:8080(主机端口:容器端口)
port=$5

# 组合完整的镜像地址,例如:192.168.1.100:5000/devops-project/user-service:v1.2.0
imageName=$harbor_url/$harbor_project_name/$project_name:$tag

# 查找正在运行的容器(按项目名称过滤)
containerId=`docker ps -a | grep ${project_name} | awk '{print $1}'`
# 如果找到已有容器
if [ "$containerId" != "" ] ; then
    # 停止运行中的容器(优雅关闭,等待10秒)
    docker stop $containerId
    # 强制删除已停止的容器
    docker rm $containerId
    echo "Delete Container Success"
fi

# 查找本地镜像(按项目名称过滤)
imageId=`docker images | grep ${project_name} | awk '{print $3}'`
# 如果找到本地镜像
if [ "$imageId" != "" ] ; then
    # 强制删除镜像(多个标签时也能删除)
    docker rmi -f $imageId
    echo "Delete Image Success"
fi

# 登录Harbor私有仓库(硬编码凭证存在安全风险,建议使用安全凭据管理)
docker login -u DevOps -p P@ssw0rd $harbor_url

# 从Harbor拉取最新镜像
docker pull $imageName

# 启动新容器(后台运行)
# -d: 后台模式
# -p: 端口映射(将主机的$port前半部分映射到容器的$port后半部分)
# --name: 指定容器名称
docker run -d -p $port --name $project_name $imageName

# 输出部署结果
echo "Start Container Success"
echo "Container Name: $project_name"
echo "Access Port: $port"

相关文章:

  • spring如何解决循环依赖的问题
  • 讯方·智汇云校华为官方授权培训机构
  • 突破反爬困境:从服务端渲染到客户端SPA,爬虫环境的演变与新挑战(一)
  • Linux(Centos 7.6)命令详解:cat
  • LeetCode47
  • 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑩】
  • AI服务器散热黑科技:让芯片“冷静”提速
  • linux网络编程(1.5w字+内部程序理解网络)
  • 7-Zip Final绿色版:高效压缩解压缩工具
  • 机器学些|实战?
  • 基于Java+SpringBoot+Vue的前后端分离的校园闲置物品交易网站
  • [Windows] Win7也能控制安卓手机屏幕(手机镜像投屏):scrcpy
  • PhotoShop批处理
  • Redis7——基础篇(三)
  • 3分钟了解内外网文件传输:常见方法、注意事项有哪些?
  • 【Scrapy】Scrapy教程5——第一个Scrapy项目
  • LeetCode 2080.区间内查询数字的频率:哈希表+二分查找
  • 在线OJ答题平台功能实现
  • 基于JavaWeb的公务员招考信息发布平台(源码+文档)
  • 调用openssl实现加解密算法
  • 1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列
  • 世界哮喘日丨张旻:哮喘的整体诊断率不足三成,吸入治疗是重要治疗手段
  • 抗战回望19︱《中国工程师学会四川考察团报告》:“将来重工业所在,以四川为最适宜之地点”
  • 证券时报头版:巴菲特留给投资界的珍贵启示
  • GOMU超马世锦赛,男女冠军刷新世界纪录
  • 长三角铁路今日预计发送418万人次,持续迎来出行客流高峰