【Shell编程 / 9】脚本实战项目:从基础到进阶的自动化管理方案
文章目录
- Shell脚本实战项目
- 自动化部署脚本
- 系统监控脚本
- 文件备份脚本
- 定时任务管理脚本
- 文件传输自动化脚本
- 自动化日志清理脚本
- 用户管理脚本
Shell脚本实战项目
在掌握了 Shell 脚本的基本语法和高级技巧后,实践是进一步提升脚本编写能力的关键。通过参与一些实际的项目,我们可以更加熟练地运用 Shell 脚本来自动化任务,提升工作效率。
自动化部署脚本
自动化部署是运维和开发中常见的任务。通过编写自动化部署脚本,我们可以将繁琐的部署过程简化,确保部署的一致性和效率。
-
自动化部署脚本示例:
假设我们需要部署一个 Web 应用,并且该应用依赖于数据库和其他服务。我们可以通过一个 Shell 脚本来自动化部署过程。#!/bin/bash# 定义变量 APP_DIR="/var/www/myapp" BACKUP_DIR="/var/backups/myapp" DB_NAME="myapp_db" DB_USER="root" DB_PASS="password"# 步骤1: 更新系统 echo "Updating system..." apt-get update -y apt-get upgrade -y# 步骤2: 安装必要的软件包 echo "Installing required packages..." apt-get install -y apache2 mysql-server git# 步骤3: 克隆项目代码 echo "Cloning the project from GitHub..." git clone https://github.com/user/myapp.git $APP_DIR# 步骤4: 设置文件权限 echo "Setting permissions..." chown -R www-data:www-data $APP_DIR# 步骤5: 配置数据库 echo "Setting up the database..." mysql -u $DB_USER -p$DB_PASS -e "CREATE DATABASE IF NOT EXISTS $DB_NAME;"# 步骤6: 启动服务 echo "Starting the application..." systemctl start apache2 systemctl start mysqlecho "Deployment completed!"说明:
- 脚本首先更新系统和安装依赖的软件包。
- 然后,克隆 GitHub 上的项目代码到指定目录。
- 设置文件和目录的权限,确保 Web 服务器能正确访问。
- 最后,配置数据库并启动服务。
扩展功能:
- 可以通过
cron或systemd设置定时自动化部署。 - 使用
git pull来更新项目代码,而不是每次都进行克隆。
系统监控脚本
系统监控脚本用于实时监控系统的健康状态,及时发现并处理问题。通过这些脚本,运维人员可以更高效地管理服务器,避免系统出现故障。
-
系统监控脚本示例:
下面是一个简单的系统监控脚本,用于检查系统资源使用情况,如 CPU、内存、磁盘等,并将结果输出到日志文件中。#!/bin/bash# 定义日志文件 LOGFILE="/var/log/system_monitor.log"# 获取当前日期和时间 DATE=$(date '+%Y-%m-%d %H:%M:%S')# 记录当前日期和时间 echo "Monitoring started at $DATE" >> $LOGFILE# 检查 CPU 使用率 CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}') echo "CPU Usage: $CPU_USAGE%" >> $LOGFILE# 检查内存使用情况 MEM_USAGE=$(free -m | grep Mem | awk '{print $3/$2 * 100.0}') echo "Memory Usage: $MEM_USAGE%" >> $LOGFILE# 检查磁盘空间 DISK_USAGE=$(df -h | grep '^/dev/' | awk '{ print $5 " " $6 }') echo "Disk Usage:" >> $LOGFILE echo "$DISK_USAGE" >> $LOGFILE# 检查当前登录的用户 USERS=$(who) echo "Logged-in Users:" >> $LOGFILE echo "$USERS" >> $LOGFILE# 完成监控 echo "Monitoring completed at $(date '+%Y-%m-%d %H:%M:%S')" >> $LOGFILE说明:
- 脚本首先记录当前的时间戳。
- 然后,使用
top命令获取 CPU 使用率,free命令获取内存使用情况,df命令检查磁盘空间。 - 所有监控信息都会输出到日志文件
/var/log/system_monitor.log中,便于后续查看。
扩展功能:
- 可以通过
cron定期执行此脚本,实时记录系统状态。 - 可以加入告警机制,当某项资源使用率超过阈值时发送邮件或短信通知。
文件备份脚本
在生产环境中,定期备份是确保数据安全和可靠性的关键。通过编写一个自动化备份脚本,可以定期备份重要文件或目录,并进行压缩和远程存储。
示例
#!/bin/bash# 定义备份目录和目标存储路径
SOURCE_DIR="/home/user/important_data"
BACKUP_DIR="/var/backups"
REMOTE_SERVER="user@backup-server:/backups"
DATE=$(date '+%Y-%m-%d-%H%M%S')# 步骤1: 创建备份文件夹(如果不存在)
mkdir -p $BACKUP_DIR# 步骤2: 压缩并备份文件
echo "Starting backup of $SOURCE_DIR to $BACKUP_DIR/backup-$DATE.tar.gz"
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE_DIR# 步骤3: 将备份文件上传至远程服务器
echo "Uploading backup to remote server..."
scp $BACKUP_DIR/backup-$DATE.tar.gz $REMOTE_SERVER# 步骤4: 清理过期的备份文件(保留最近7个备份)
echo "Cleaning up old backups..."
cd $BACKUP_DIR
ls -t | grep "backup-" | awk 'NR>7' | xargs rm -fecho "Backup completed!"
说明:
- 脚本会创建备份文件并进行压缩。
- 然后,它会将备份文件上传到远程服务器。
- 最后,脚本清理掉过期的备份,只保留最近7个备份文件。
扩展功能:
- 可以使用
cron来定期执行备份任务。 - 增加备份通知(通过邮件等方式)告知备份成功或失败。
定时任务管理脚本
在 Linux 系统中,cron 是最常用的定时任务管理工具。通过 Shell 脚本,用户可以简化定时任务的添加、删除和查看操作,避免手动编辑 crontab 文件。
示例
#!/bin/bash# 定义任务和时间参数
TASK_COMMAND="$1"
TASK_TIME="$2"
TASK_NAME="$3"# 检查输入参数
if [[ -z "$TASK_COMMAND" || -z "$TASK_TIME" || -z "$TASK_NAME" ]]; thenecho "Usage: $0 <command> <time> <task_name>"exit 1
fi# 添加定时任务
echo "$TASK_TIME $TASK_COMMAND # Task: $TASK_NAME" >> /etc/crontab# 重新加载 crontab 配置
systemctl restart cronecho "Scheduled task '$TASK_NAME' added successfully!"
说明:
- 脚本允许用户传入定时任务命令、执行时间和任务名称。
- 它会将任务添加到系统的 crontab 文件中,并重启
cron服务,使之生效。
扩展功能:
- 可以加入功能来删除指定任务,或者列出当前所有的定时任务。
- 可以扩展为检查时间格式的有效性,避免输入错误的时间参数。
文件传输自动化脚本
在日常运维中,文件的自动化传输是非常常见的需求。通过 Shell 脚本,可以实现文件从本地到远程服务器,或者从一个服务器到另一个服务器的自动传输。
示例
#!/bin/bash# 定义源文件夹和目标路径
SOURCE_DIR="/home/user/files"
TARGET_SERVER="user@remote-server:/home/user/backup"
DATE=$(date '+%Y-%m-%d-%H%M%S')# 步骤1: 压缩文件
echo "Compressing files in $SOURCE_DIR..."
tar -czf /tmp/files_$DATE.tar.gz -C $SOURCE_DIR .# 步骤2: 传输文件到远程服务器
echo "Transferring files to remote server..."
scp /tmp/files_$DATE.tar.gz $TARGET_SERVER# 步骤3: 清理临时文件
rm -f /tmp/files_$DATE.tar.gzecho "File transfer completed!"
说明:
- 脚本将指定目录的文件进行压缩。
- 然后将压缩文件通过
scp命令传输到远程服务器。 - 最后,清理掉临时文件。
扩展功能:
- 可以加上同步检查,避免重复传输。
- 在传输过程中,增加重试机制,确保文件传输成功。
自动化日志清理脚本
为了保证系统的稳定性,定期清理日志文件是非常重要的。过多的日志文件会占用磁盘空间,影响系统性能。通过 Shell 脚本,可以定期清理指定的日志文件。
示例
#!/bin/bash# 定义日志目录和保留的天数
LOG_DIR="/var/log"
RETENTION_DAYS=30# 步骤1: 查找并删除超过 $RETENTION_DAYS 天的日志文件
echo "Cleaning up logs older than $RETENTION_DAYS days..."
find $LOG_DIR -type f -name "*.log" -mtime +$RETENTION_DAYS -exec rm -f {} \;echo "Log cleanup completed!"
说明:
- 脚本会查找指定目录下所有
.log文件,并删除超过指定天数的日志文件。 - 我们可以根据需要调整
RETENTION_DAYS的值,控制日志保留的时间。
扩展功能:
- 可以增加日志备份功能,在删除日志之前先备份到指定目录。
- 可以通过邮件通知系统管理员清理的结果。
用户管理脚本
在多人使用的系统中,管理用户账户是运维人员的常见任务。通过 Shell 脚本,可以简化添加、删除、修改用户的过程。
示例
#!/bin/bash# 获取操作类型(添加、删除、修改)
ACTION=$1
USER_NAME=$2
USER_PASSWORD=$3# 判断是否传入必要的参数
if [[ -z "$ACTION" || -z "$USER_NAME" ]]; thenecho "Usage: $0 <add|del|modify> <username> [password]"exit 1
fi# 根据不同的操作执行
case $ACTION inadd)# 添加用户if id "$USER_NAME" &>/dev/null; thenecho "User $USER_NAME already exists!"elseuseradd "$USER_NAME"if [[ -n "$USER_PASSWORD" ]]; thenecho "$USER_NAME:$USER_PASSWORD" | chpasswdfiecho "User $USER_NAME added successfully!"fi;;del)# 删除用户userdel -r "$USER_NAME"echo "User $USER_NAME deleted successfully!";;modify)# 修改用户密码if [[ -n "$USER_PASSWORD" ]]; thenecho "$USER_NAME:$USER_PASSWORD" | chpasswdecho "Password for $USER_NAME modified successfully!"elseecho "Please provide a new password!"exit 1fi;;*)echo "Invalid action! Use add, del or modify."exit 1;;
esac
说明:
- 该脚本可以用于添加、删除和修改用户账户。
- 可以通过输入参数来指定操作类型(添加、删除、修改),以及要操作的用户名和密码。
扩展功能:
- 可以加入更多用户信息的设置,比如分配用户组等。
- 通过邮件通知操作结果,或记录操作日志。
相关文章:
【Shell编程 / 9】脚本实战项目:从基础到进阶的自动化管理方案
文章目录 Shell脚本实战项目自动化部署脚本系统监控脚本文件备份脚本定时任务管理脚本文件传输自动化脚本自动化日志清理脚本用户管理脚本 Shell脚本实战项目 在掌握了 Shell 脚本的基本语法和高级技巧后,实践是进一步提升脚本编写能力的关键。通过参与一些实际的项…...
在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源
插值法其实就是在已知数据点之间估计未知点的值。通过已知的离散数据点,构造一个连续的曲线函数,预测数据点之间的空缺值是什么并且自动填补上去。 适用场景: 在卷积神经网络(CNN)中的应用场景中,经常遇到计算资源有限,比如显存不够或者处理速度慢,需要用插值来降低计…...
黄金市场现状与驱动因素分析
一、当前市场现状:挤兑、运力与供应链危机 全球金库告急与运输瓶颈 伦敦商业银行金库的黄金存量告急,纽约和伦敦市场出现“史诗级挤兑”。提取英格兰银行金库的黄金需等待4-8周,远高于常规的几天时间[citation:用户描述]。专业运输车辆超负荷…...
Linux arm64 IOMMU总结
一、DMA的引入 Non-DMA:CPU直接与设备进行数据交互,CPU的负载会随着数据的读写而增加; DMA:CPU不参与数据的直接传输,DMA Controller负责Device与Memory之间的数据搬运,并以中断信号的形式通知CPU…...
服务器通过 ollama 运行deepseek r1
1、服务器环境简介 56核 CPU64G 内存无显卡已安装 Ollama 2、下载模型与配置 正常可以通过 ollama pull 或 ollama run 命令直接下载,但通常会遇到连接超时、找不到网址等总理。因此,可以使用国内的模型站进行下载,在这里使用魔塔查找模型…...
MYSQL学习笔记(九):MYSQL表的“增删改查”
前言: 学习和使用数据库可以说是程序员必须具备能力,这里将更新关于MYSQL的使用讲解,大概应该会更新30篇,涵盖入门、进阶、高级(一些原理分析);这一篇讲述一些在MYSQL的数据类型,和表的“增删改查”基本操作;虽然MYSQ…...
Oracle JDK、Open JDK zulu下载地址
一、Oracle JDK https://www.oracle.com/java/technologies/downloads/ 刚进去是最新的版本,往下滑可以看到老版本 二、Open JDK的 Azul Zulu https://www.azul.com/downloads/ 直接可以选版本等选项卡...
分类解析决策模型
一、按理性程度划分的决策模型 1. 完全理性模型(古典决策理论) 核心假设:决策者拥有完全信息,能计算所有选项的效用并选择最优解。数学模型: 期望效用理论(Expected Utility Theory, EU): E U = ∑ ( p i...
【SPIE出版,见刊快速,EI检索稳定,浙江水利水电学院主办】2025年物理学与量子计算国际学术会议(ICPQC 2025)
2025年物理学与量子计算国际学术会议(ICPQC 2025)将于2025年4月18-20日在中国杭州举行。本次会议旨在汇聚全球的研究人员、学者和业界专家,共同探讨物理学与量子计算领域的最新进展与前沿挑战。随着量子技术的快速发展,其在信息处…...
【网络】高级IO——Reactor版TCP服务器
1.什么是Reactor Reactor 是一种应用在服务器端的开发模式(也有说法称 Reactor 是一种 IO 模式),目的是提高服务端程序的并发能力 它要解决什么问题呢? 传统的 thread per connection 用法中,线程在真正处理请求之前首…...
3.Docker常用命令
1.Docker启动类命令 1.启动Docker systemctl start docker 2.停止Docker systemctl stop docker 3.重启Docker systemctl restart docker 4.查看Docker状态 systemctl status docker 5.设置开机自启(执行此命令后每次Linux重启后将自启动Docker) systemctl enable do…...
【uni-app】对齐胶囊容器组件
代码碎片 <template><div><view :style"{ height: ${statusBarHeight}px }"></view><viewclass"":style"{height: ${menuButtonHeight menuButtonPadding * 2}px,width: ${menuButtonInfo.left}px,}"><slot …...
JUC并发—10.锁优化与锁故障
大纲 1.标志位修改场景优先使用volatile(服务优雅停机) 2.数值递增场景优先使用Atomic类(心跳计数器) 3.共享变量仅对当前线程可见的场景优先使用ThreadLocal(edits log的处理) 4.读多写少需要加锁的场景优先使用读写锁(服务注册表的并发读写) 5.尽量减少线程对锁占用时间…...
Java 大视界 -- 区块链赋能 Java 大数据:数据可信与价值流转(84)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
大数据学习之PB级音乐数据中心数仓综合项目(1)-理论知识和项目需求、歌曲热度与歌手热度排行
一、理论知识和项目需求 1.课程介绍 2.数据库与ER建模_数据库三范式 3.数据库与ER建模_ER实体关系模型 4.数据库与维度建模_数据仓库(DATA WAREHOUSE) 5.数据库与维度建模_数据库与数据仓库区别 6.数据库与维度建模_数据仓库的发展历程 7.数据库与维度建模_维度建模 8.数据库与…...
DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?
一、引言 在当今科技飞速发展的时代,人工智能(AI)已然成为推动各领域变革的核心力量。而在人工智能的众多分支中,自然语言处理(NLP)因其与人类日常交流和信息处理的紧密联系,成为了最受瞩目的领…...
七星棋牌顶级运营产品全开源修复版源码教程:6端支持,200+子游戏玩法,完整搭建指南(含代码解析)
棋牌游戏一直是移动端游戏市场中极具竞争力和受欢迎的品类,而七星棋牌源码修复版无疑是当前行业内不可多得的高质量棋牌项目之一。该项目支持 6大省区版本(湖南、湖北、山西、江苏、贵州),拥有 200多种子游戏玩法,同时…...
本2硕9电子科学专业,想走linux或是嵌入式,要具体学哪些技术
今天给大家分享的是一位粉丝的提问,本2硕9电子科学专业,想走linux或是嵌入式,要具体学哪些技术 接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。 同学提问: 你好&…...
从混沌到有序:一个数据血缘分析的进化故事
从混沌到有序:一个数据血缘分析的进化故事 从混沌到有序的数据治理之路数据血缘的建设方法和实践路径数据血缘的实践场景和未来趋势。 数据就像流淌在企业血管中的血液,它的每一次流动、每一次转化都留下独特的印记。 作为数据工程师,我曾困惑…...
从猜想终结到算法革新,弹性哈希开启数据存储新篇章
目录 哈希表的前世今生基本原理从传统到现代:哈希表的演变历程 安德鲁 克拉皮文及其团队的创作历程弹性哈希详解基本原理优点技术细节 漏斗哈希解析基本原理优点技术细节 新算法的实际应用案例电子商务推荐系统金融交易监控系统社交媒体内容过滤物联网设备管理 结论…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
