个人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)
dodf -i >> /tmp/$d_logif [ "$i" -ge 1 ]thenmail -s "title" root < /tmp/$d_logfi

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
thenecho "没有pgrep命令"exit 1
fiif ! which ss &>/dev/null
thenecho "没有pgrep命令"exit 1
fi}#判断进程是否存在可以用ps aux | grep 服务名  
check_pid (){if pgrep "$1" &>/dev/nullthenreturn 0elsereturn 1fi
}#判断端口是否存在
check_port (){
#统计端口的行数
port=$(ss -npl|grep ":$2"|wc -l)if [ "$port" -ne "0" ] &>/dev/nullthenreturn 0elsereturn 1fi}
#判断端口和经常是否同时存在来判断服务是否正常
check_srv (){
if check_pid "$1" && check_port "$2"
thenecho "$1正常"
elseecho "$1不正常"fi
}check_tools
#输入相应服务和端口
check_srv ssh 22

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

#!/bin/bash#检查本机有没有curl命令
if ! which curl &>/dev/null
thenecho "没有安装curl"yum -y install curlif [ "$?" -ne "0" ]thenecho "没有curl"exitfi
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]"
thenecho "$1访问正常"
elseecho "$1访问不正常"
fi

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


#!/bin/bashfor mount_p in $(df -h | grep -v Size | grep -v tmpfs | awk '{print $NF}')
dotouch $mount_p/dir && rm -rf $mount_p/dirif [ "$?" -eq "0" ]thenecho "读写没问题"elseecho "读写有问题"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 $containerIdecho "Delete Container Success"
fi# 查找本地镜像(按项目名称过滤)
imageId=`docker images | grep ${project_name} | awk '{print $3}'`
# 如果找到本地镜像
if [ "$imageId" != "" ] ; then# 强制删除镜像(多个标签时也能删除)docker rmi -f $imageIdecho "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"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70143.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django 5 实用指南(一)安装与配置

1.1 Django5的背景与发展 Django 自从2005年由Adrian Holovaty和Simon Willison在 Lawrence Journal-World 新闻网站上首次发布以来&#xff0c;Django 一直是 Web 开发领域最受欢迎的框架之一。Django 框架经历了多个版本的演进&#xff0c;每次版本更新都引入了新功能、改进了…

百度搜索融合 DeepSeek 满血版,开启智能搜索新篇

百度搜索融合 DeepSeek 满血版&#xff0c;开启智能搜索新篇 &#x1f680; &#x1f539; 一、百度搜索全量接入 DeepSeek &#x1f539; 百度搜索迎来重要升级&#xff0c;DeepSeek 满血版全面上线&#xff01;&#x1f389; 用户在百度 APP 搜索后&#xff0c;点击「AI」即…

RabbitMQ服务异步通信

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息可靠性 消息从发送&#xff0c;到消费者接收&#xff0c;会经理多个过程&#xff1a; 其中的每一步都可能导致消息丢失&#xff0c;常见的丢失原因包括&#xff1a; 发送时丢失&#xff1a; 生…

【教程】MySQL数据库学习笔记(七)——多表操作(持续更新)

写在前面&#xff1a; 如果文章对你有帮助&#xff0c;记得点赞关注加收藏一波&#xff0c;利于以后需要的时候复习&#xff0c;多谢支持&#xff01; 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 第三章 《数据定义语言DDL》 第四章 《数据操…

胶囊网络动态路由算法:突破CNN空间局限性的数学原理与工程实践

一、CNN的空间局限性痛点解析 传统CNN的瓶颈&#xff1a; 池化操作导致空间信息丢失&#xff08;最大池化丢弃85%激活值&#xff09;无法建模层次空间关系&#xff08;旋转/平移等变换不敏感&#xff09;局部感受野限制全局特征整合 示例对比&#xff1a; # CNN最大池化示例…

#渗透测试#批量漏洞挖掘#Apache Log4j反序列化命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Apache Log4j反序列化命令执行漏洞 一、…

深入剖析Spring MVC

一、Spring MVC 概述 1. 什么是 Spring MVC&#xff1f; Spring MVC 是基于 Spring 框架的 Web 框架&#xff0c;它实现了 MVC 设计模式&#xff0c;将应用程序分为三个核心部分&#xff1a; Model&#xff1a;封装应用程序的数据和业务逻辑。 View&#xff1a;负责渲染数据…

机器学习入门-读书摘要

先看了《深度学习入门&#xff1a;基于python的理论和实践》这本电子书&#xff0c;早上因为入迷还坐过站了。。 因为里面的反向传播和链式法则特别难懂&#xff0c;又网上搜了相关内容进行进一步理解&#xff0c;参考的以下文章&#xff08;个人认为都讲的都非常好&#xff0…

【AI】mac 本地部署 Dify 实现智能体

下载 Ollama 访问 Ollama 下载页&#xff0c;下载对应系统 Ollama 客户端。或者参考文章【实战AI】macbook M1 本地ollama运行deepseek_m1 max可以跑deepseek吗-CSDN博客 dify 开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&am…

[实现Rpc] 消息抽象层的具体实现

目录 具象层 _ 消息抽象的实现 信息的抽象类 实现 JsonMessage JsonRequest & JsonResponse 消息-不同消息分装实现 实现 Request RpcRequest TopicRequest ServiceRequest Response RpcResponse TopicResponse ServiceResponse 实现 生产工厂 本篇文章继 …

计算机考研之数据结构:深入解析最大公约数与欧几里得算法

一、生活中的公约数应用 在日常生活中&#xff0c;经常需要处理"均分分配"问题。例如&#xff1a;要将24块巧克力和18块饼干平均分给小朋友&#xff0c;最多能分给几个小朋友&#xff1f;这就是典型的求最大公约数问题。 二、基本概念详解 约数与公约数 约数&…

NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配

检查涉及的数据表和列的字符集设置 -- 查询表的字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE NLS_CHARACTERSET;-- 查询列的字符集&#xff08;对于特定表&#xff09; SELECT column_name, character_set_name FROM all_tab_columns W…

算法之 跳跃游戏

文章目录 55.跳跃游戏思路参考&#xff1a;56.合并区间 55.跳跃游戏 55.跳跃游戏 灵神思路 思路分析&#xff1a; 两种思路&#xff0c;思路1是我们可以直接维护当前到达i的时候所能到达的最右的边界mr&#xff0c;如果i>mr就说明无法到达i,否则就是可以到达&#xff1b;…

在C#中动态访问对象属性时,用表达式树可以获得高效性能

在C#中如何用表达式树动态访问对象属性的问题。用户可能已经知道反射的基本用法&#xff0c;但想用表达式树来提高性能&#xff0c;因为表达式树编译后的委托执行速度比反射快。 首先&#xff0c;表达式树的基本概念。表达式树允许在运行时构建代码&#xff0c;并编译成可执行的…

深入解析 Flutter 性能优化:从原理到实践

深入解析 Flutter 性能优化&#xff1a;从原理到实践的全面指南 Flutter 是一个高性能的跨平台框架&#xff0c;但在开发复杂应用时&#xff0c;性能问题仍然可能出现。性能优化是开发高质量 Flutter 应用的关键。本篇博客将从 Flutter 的渲染原理出发&#xff0c;结合实际场景…

使用 Python 爬虫获取微店快递费用 item_fee API 接口数据

在电商运营中&#xff0c;快递费用是影响商家利润和用户体验的重要因素之一。微店作为国内知名的电商平台&#xff0c;提供了丰富的 API 接口供开发者使用&#xff0c;其中也包括查询商品快递费用的接口。通过调用微店的 item_fee 接口&#xff0c;开发者可以获取指定商品的快递…

MySQL基本操作——包含增删查改(环境为Ubuntu20.04,MySQL5.7.42)

1.库的操作 1.1 创建数据库 语法&#xff1a; 说明&#xff1a; 大写的表示关键字 [] 是可选项 CHARACTER SET: 指定数据库采用的字符集 COLLATE: 指定数据库字符集的校验规则 1.2 创建案例 创建一个使用utf8字符集的db1数据库 create database db1 charsetutf8; …

Spring Boot 定时任务:轻松实现任务自动化

在现代应用开发中&#xff0c;定时任务是一个常见的需求。比如&#xff0c;我们可能需要定时清理过期数据、定时发送邮件通知等。 操作流程 开启定时任务注解 在启动类添加注解EnableScheduling 设置时间&#xff08;固定时间间隔&#xff09; 使用 Scheduled 注解创建定时…

七星棋牌全开源修复版源码解析:6端兼容,200种玩法全面支持

本篇文章将详细讲解 七星棋牌修复版源码 的 技术架构、功能实现、二次开发思路、搭建教程 等内容&#xff0c;助您快速掌握该棋牌系统的开发技巧。 1. 七星棋牌源码概述 七星棋牌修复版源码是一款高度自由的 开源棋牌项目&#xff0c;该版本修复了原版中的多个 系统漏洞&#…

【Rust中级教程】1.12. 生命周期(进阶) Pt.2:生命周期变型、协变、不变、逆变

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 这篇文章在Rust初级教程的基础上对生命周期这一概念进行了补充&#xff0c;建议先看【Rust自…