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

【shell脚本实战学习笔记】#2

场景描述

你负责一个Web应用的运维工作,该应用部署在一组Linux服务器上。你需要编写一个Shell脚本来自动化以下任务:

检查Web服务器进程: 确保Web服务器(例如Apache或Nginx)正常运行。如果没有运行,则尝试重启服务。
监控磁盘空间: 检查应用服务器的根分区磁盘空间使用情况,如果使用超过85%,则发送警报。
备份日志文件: 将/var/log目录下的日志文件压缩并移动到备份目录,同时保留最近7天的日志。
系统健康报告: 生成一个包含服务器的CPU使用率、内存使用情况、磁盘空间和当前运行的Web服务器进程数量的报告。

Shell脚本需求

健壮性: 脚本在执行各项任务时应检查潜在的错误,例如磁盘空间不足、服务无法启动等,并相应地处理这些错误。
通知机制: 当发现重要问题(如服务停止、磁盘空间过高)时,脚本应发送通知到预设的管理员邮箱或通过其他通讯工具。
日志记录: 脚本执行的所有操作都应该有日志记录,便于事后审计和故障排查。
定时执行: 该脚本应配置为定时任务,例如每天执行一次。

这个脚本不仅可以帮助自动化日常运维任务,提高工作效率,还能及时发现并处理潜在的问题,避免可能的服务中断。

#初版脚本:

#!/bin/bash# 配置部分
web_service='nginx' # 你的Web服务名称,比如apache或nginx
backup_dir='/path/to/backup' # 日志备份目录
admin_email='admin@example.com' # 管理员邮箱# 发送通知
send_notification() {subject=$1message=$2# 使用mail命令发送邮件,也可以替换成其他通知方式echo "$message" | mail -s "$subject" $admin_email
}# 检查Web服务
check_web_service() {if systemctl is-active --quiet $web_service; thenecho "Web服务正在运行"elseecho "Web服务未运行,尝试启动..."systemctl start $web_serviceif [ $? -ne 0 ]; thensend_notification "Web服务启动失败" "尝试启动$web_service失败,请立即检查!"fifi
}# 监控磁盘空间
monitor_disk_space() {usage=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')if [ $usage -ge 85 ]; thensend_notification "磁盘空间警告" "根分区磁盘使用率已达$usage%,请及时清理。"fi
}# 备份日志文件
backup_logs() {tar czf $backup_dir/log-$(date +%Y%m%d).tar.gz /var/logfind $backup_dir -type f -name 'log-*.tar.gz' -mtime +7 -exec rm {} \;
}# 系统健康报告
system_health_report() {cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')mem_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')disk_usage=$(df -h / | awk 'NR==2 {print $5}')web_proc_count=$(ps -ef | grep $web_service | grep -v grep | wc -l)echo "系统健康报告:"echo "CPU使用率: $cpu_usage%"echo "内存使用率: $mem_usage"echo "磁盘使用率: $disk_usage"echo "Web服务进程数量: $web_proc_count"
}# 主执行函数
main() {check_web_servicemonitor_disk_spacebackup_logssystem_health_report
}# 调用主函数
main# 日志记录(可按需调整)
echo "脚本执行完成: $(date)" >> /var/log/maintenance_script.log

相关文章:

【shell脚本实战学习笔记】#2

场景描述 你负责一个Web应用的运维工作,该应用部署在一组Linux服务器上。你需要编写一个Shell脚本来自动化以下任务: 检查Web服务器进程: 确保Web服务器(例如Apache或Nginx)正常运行。如果没有运行,则尝试…...

docker 安装nacos 一脚shell脚本

要创建一个用于安装Nacos的Docker的Shell脚本,你可以按照以下步骤进行。这个脚本会执行以下操作: 拉取Nacos的Docker镜像。创建一个Docker容器并映射必要的端口。设置Nacos的环境变量。如果需要,可以持久化存储数据到本地目录。 以下是一个…...

mysql的隔离级别,和实现

参考链接 https://xiaolincoding.com/mysql/transaction/mvcc.html#%E4%BA%8B%E5%8A%A1%E7%9A%84%E9%9A%94%E7%A6%BB%E7%BA%A7%E5%88%AB%E6%9C%89%E5%93%AA%E4%BA%9B 事务特性(ACID) 原子性(Atomicity): 事务是原子的&…...

Linux的信号

Linux的信号是一种用于进程之间通信的机制。它们用于向进程发送通知,告知进程发生了某种事件或请求进程执行某个操作。信号可以由内核、其他进程或进程自身发送。 信号的作用有以下几个方面: 通知进程某个事件的发生,如进程的终止、挂起、恢…...

Spring数据脱敏实现

在当今的数字化时代,数据安全和个人隐私保护变得日益重要。为了遵守各种数据保护法规,如欧盟的GDPR(通用数据保护条例),企业在处理敏感信息时需要格外小心。数据脱敏是一种常见的技术手段,用于隐藏敏感数据…...

Java核心-核心类与API(4)

话接上回,继续核心类与API的学习,最后介绍一下Object类以及与数学、日期/时间有关的类,就结束该部分的学习了,其他的根据需要自行了解。 一、Object类 1、概述 Object 是 Java 类库中的一个特殊类,也是所有类的父类…...

【C语言】详解计算机二级c语言程序题

文章目录 前言资料相关程序题 一(字符串)程序题 二(数组)程序题 三(基础)程序题 四(结构体)程序题 五(结构体)程序题 六(基础) 前言 …...

限流算法

下面对常见的限流算法进行讨论。目前,常用的限流算法主要有三种:计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。 1. 计数器法 计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求,则在该…...

备战蓝桥杯 Day10(背包dp)

01背包问题 1267:【例9.11】01背包问题 【题目描述】 一个旅行者有一个最多能装 M� 公斤的背包,现在有 n� 件物品,它们的重量分别是W1,W2,...,Wn�1,�2&#…...

Sora 使用教程,新手小白可用

Sora 使用教程,新手小白可用 参考文章:Sora 使用教程,OpenAI 的文生视频模型 为了在激烈的行业竞争中保持领先地位,OpenAI 在 2024 年 2 月 15 日发布了其革命性的文本至视频转换模型——Sora。这个先进的工具能够将文本描述转化…...

【洛谷千题详解】P1031 均分纸牌

目录 题目描述 思路点拨 AC代码 题目描述 题目网址:[NOIP2002 提高组] 均分纸牌 - 洛谷 有 N 堆纸牌,编号分别为 1,2,……,N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若干张纸牌,然后移动。 移牌规则为&a…...

基于文本提示和语义分割的快速抠图

基于文本提示和语义分割的快速抠图 1. 介绍2. 效果展示3. 安装模型4. 命令行调用5. 代码调用5.1 模型加载5.2 可视化函数定义5.3 图像语义分割 6. 参考资料7. 结语服务 1. 介绍 传统的图像语义分割模型通常固定类别进行分割,而基于文本提示的语义分割模型则具有更高…...

什么是媒体发稿?发稿媒体分类及发稿流程

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体发稿是一种企业推广和宣传的手段,通过媒体渠道传递企业信息和形象。 媒体发稿的含义在于,当企业有新闻、事件或其他消息需要对外公布时,可以选择…...

安全测试自学手册之软件安全测试基础

安全测试的概念 定义:指有关验证应用程序的安全等级和识别潜在安全性缺陷的过程。】 应用软件的安全性测试:软件自身设计中存在的安全隐患,并检查软件对非法入侵的防御能力。系统级别的安全性测试:确保只有具备系统平台访问权限…...

【LeetCode】升级打怪之路 Day 04:链表 part 2

今日题目: 24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点160. 相交链表142. 环形链表 II 目录 LeetCode 24. 两两交换链表中的节点 【易错】LeetCode 19. 删除链表的倒数第 N 个结点 【还行】LeetCode 160. 相交链表(两个链表是否相交&#xf…...

JAVA编程题系列——涵盖几乎所有java内容

自己定义一个类,有static属性和构造方法,有构造方法重载,有其他方法(方法有对String类型操作) public class MyClass {// 静态属性public static String staticProperty "Static Property";// 成员变量priv…...

【Android12】Monkey压力测试源码执行流程分析

Monkey压力测试源码执行流程分析 Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。 其源码路径(Android12)位于 /development/cmds/monkey/部署形式为Java Binary # development/cmds/monkey/Android.bp // Copyright 2008 The Android Open Source Proj…...

Java架构师之路八、安全技术:Web安全、网络安全、系统安全、数据安全等

目录 Web安全: 网络安全: 系统安全: 数据安全: Java架构师之路七、大数据:Hadoop、Spark、Hive、HBase、Kafka等-CSDN博客Java架构师之路九、设计模式:常见的设计模式,如单例模式、工厂模式…...

Codeforces Round 240 (Div. 1) C. Mashmokh and Reverse Operation(分治+逆序对)

原题链接:C. Mashmokh and Reverse Operation 题目大意: 给出一个长度为 2 n 2^{n} 2n 的正整数数组 a a a ,再给出 m m m 次操作。 每次操作给出一个数字 q q q ,把数组分为 2 n − q 2^{n-q} 2n−q 个长度为 2 q 2^{q} 2…...

SpringBoot源码解读与原理分析(三十二)SpringBoot整合JDBC(一)JDBC组件的自动装配

文章目录 前言第10章 SpringBoot整合JDBC10.1 SpringBoot整合JDBC的项目搭建10.1.1 初始化数据库10.1.2 整合项目10.1.2.1 导入JDBC和MySQL驱动依赖10.1.2.2 配置数据源 10.1.3 编写业务代码10.1.3.1 编写与t_user表对应的实体类User10.1.3.2 编写Dao层代码10.1.3.3 编写Servic…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...