网站首页 > 技术文章 正文
前言:为何需要批量重启服务器?
在运维工作中,服务器的定期重启是常见的维护操作,主要用于:
- 释放系统资源,防止长时间运行导致性能下降。
- 应用关键更新,如内核升级、安全补丁等。
- 处理系统异常,如内存泄漏、进程僵死等问题。
但如果手动一台台登录并执行 reboot,效率低且容易出错。今天,我们介绍一款自动化 Bash 脚本——ssh_auto_reboot.sh,助你一键批量远程重启服务器!
一、什么是 ssh_auto_reboot.sh?
ssh_auto_reboot.sh 是一个用于批量远程重启服务器的自动化脚本,具备以下功能:
- 批量重启服务器:从 servers.txt 读取服务器列表,并自动执行 reboot 命令。
- **自动安装 sshpass**:如未安装,脚本会自动安装,以支持免交互 SSH 连接。
- 执行日志输出:记录每台服务器的重启情况,便于追踪。
二、完整脚本源码
#!/bin/bash
# ssh_auto_reboot.sh - 远程批量重启服务器脚本
# 该脚本用于批量远程重启服务器,提升维护效率。
#
# 功能:
# - 自动检测并安装 sshpass(如未安装)
# - 读取服务器列表(servers.txt),解析用户、IP、密码信息
# - 使用 SSH 连接远程服务器并执行重启命令
# - 记录重启成功与失败的服务器信息
# 服务器列表存储文件
SERVER_LIST="servers.txt"
# 检查 sshpass 是否安装
if ! command -v sshpass &> /dev/null; then
echo "sshpass 未安装,正在尝试安装..."
sudo apt-get update && sudo apt-get install -y sshpass
fi
# 读取服务器列表并执行重启
while IFS=',' read -r REMOTE_USER REMOTE_HOST REMOTE_PASS; do
echo "正在重启服务器: ${REMOTE_HOST}"
sshpass -p "${REMOTE_PASS}" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo reboot"
echo "远程服务器 ${REMOTE_HOST} 正在重启..."
done < ${SERVER_LIST}
echo "所有服务器重启任务完成"
三、脚本使用方法
1. 准备服务器列表文件
创建 servers.txt,格式如下:
user1,host1,password1
user2,host2,password2
支持多个服务器,每行一个。
2. 运行脚本
赋予执行权限并运行:
chmod +x ssh_auto_reboot.sh
./ssh_auto_reboot.sh
脚本会自动读取 servers.txt,并重启所有服务器。
3. 确认服务器重启状态
可以使用 ping 或 SSH 连接检查服务器是否成功重启:
ping -c 4 remote_host
ssh user@remote_host "uptime"
四、核心功能解析
1. 自动安装 sshpass
sshpass 允许通过密码进行 SSH 连接,避免手动输入:
if ! command -v sshpass &> /dev/null; then
sudo apt-get update && sudo apt-get install -y sshpass
fi
2. 远程服务器重启
使用 ssh 执行 sudo reboot 命令,让服务器重启:
sshpass -p "${REMOTE_PASS}" ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "sudo reboot"
3. 读取服务器列表
使用 while 读取 servers.txt,确保正确解析用户、IP 和密码:
while IFS=',' read -r REMOTE_USER REMOTE_HOST REMOTE_PASS; do
sshpass -p "${REMOTE_PASS}" ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo reboot"
done < ${SERVER_LIST}
五、应用场景
- 批量服务器维护:当需要定期重启大量服务器时,提高效率。
- 更新内核与补丁:有些系统更新需要重启生效。
- 恢复系统稳定性:适用于解决长期运行导致的系统异常。
- 数据中心管理:适用于企业级 IDC 服务器群管理。
六、总结:高效运维,从自动化重启开始!
ssh_auto_reboot.sh 是一个简单高效的批量重启工具,适用于各种服务器运维场景。如果你觉得这个脚本实用,不妨分享给更多运维小伙伴,让大家一起提高运维效率!
猜你喜欢
- 2025-08-01 AI 推理 | vLLM 快速部署指南
- 2025-08-01 Java实现调用nvidia硬编解码
- 2025-08-01 运维必备:掌握这3个存储技术
- 2025-08-01 Claude Code:完爆 Cursor 的编程体验
- 2025-08-01 【Docker 新手入门指南】第十章:Dockerfile
- 2025-08-01 Linux漏洞检测与修复工具示例
- 2025-08-01 Dify存储告急别焦虑!6步迁移教程,系统无缝切换,流畅度暴涨!
- 2025-08-01 技术栈:全网疯传的Claude code,保姆级使用教程来啦!
- 2025-08-01 如何使用 Prometheus 监控 Linux 服务器性能
- 2025-08-01 LLVM IR入门:编写自定义优化Pass的完整教程与性能影响分析
- 08-02C|在一个结构体嵌套一个共用体实现一体多用
- 08-02C++中,常用的强制类型转换函数
- 08-02如何使用C语言编程实现一个推箱子游戏?技术核心和算法实现
- 08-02C++20 新特性(24):模板访问权限和typename的放宽
- 08-02C++零基础到工程实践
- 08-02[深度学习] Python人脸识别库face_recognition使用教程
- 08-02AI算法之怎么利用Python实现支持向量机SVM算法
- 08-02【机器学习】SVM支持向量机
- 1521℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 623℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 526℃MySQL service启动脚本浅析(r12笔记第59天)
- 492℃启用MySQL查询缓存(mysql8.0查询缓存)
- 491℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 479℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 460℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 458℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)