个人shell脚本分享
- 开源代码
- 2025-08-30 13:30:01

在周一到周五做增量备份,在周六周日做完全备份 #!/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/$DATEelse # 增量备份 if [ -z “$LAST_FUL” ]; then
cp -a $SRC $FUL/$DATE fifi
实现从代码仓库拉取最新代码、构建、测试、部署到生产环境的自动化流程 #!/bin/bash read -p "输入git仓库名" a git_url=$a read -p "输入存放目录" b git_dir=$bif [ ! -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"]thenread−p"是否创建目录,输入y或n"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 fidone
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]thenmail−s"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"个人shell脚本分享由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“个人shell脚本分享”