返回
玩转 Python + Shell 巡检服务器:轻松高效,尽在掌握!
后端
2023-02-04 01:54:27
利用 Python 和 Shell 自动巡检服务器
在当今快速发展的数字时代,系统巡检已成为确保服务器稳定性和性能至关重要的日常运维任务。传统的手工巡检费时费力且容易出错,而借助 Python 和 Shell 的强大功能,我们可以实现自动化巡检,提高效率,降低失误率。
准备工作
1. Python 环境
- 安装 Python 3 或更高版本
- 安装必需的 Python 库,如 paramiko、sshtunnel 和 openpyxl
2. Shell 环境
- 选择合适的 Shell(如 Bash、Zsh 等)
- 确保 Shell 已安装并配置
编写巡检脚本
1. 创建巡检脚本文件
- 使用文本编辑器创建新文件,如巡检.sh
2. 编写巡检脚本内容
- 根据具体巡检需求,编写 Shell 脚本
- 巡检脚本应包含以下步骤:
- 登录系统服务器
- 执行巡检命令或脚本
- 获取巡检结果并保存到文件中
#!/bin/bash
# 设置要巡检的服务器列表
SERVERS=(server1.example.com server2.example.com)
# 遍历服务器列表
for SERVER in "${SERVERS[@]}"; do
# 使用 SSH 连接到服务器
ssh root@$SERVER <<EOF
# 在服务器上执行巡检命令
df -h
uptime
free -m
# 将巡检结果保存到文件中
echo "巡检结果:" >> $HOME/巡检结果.txt
df -h >> $HOME/巡检结果.txt
uptime >> $HOME/巡检结果.txt
free -m >> $HOME/巡检结果.txt
EOF
done
3. 设置执行权限
- 确保巡检脚本文件具有执行权限
- 使用 chmod +x 巡检.sh 命令设置执行权限
集成 Python 和 Shell
1. 编写 Python 脚本文件
- 使用文本编辑器创建新文件,如巡检.py
2. 编写 Python 脚本内容
- 导入必要的 Python 库
- 定义函数来调用 Shell 巡检脚本
- 通过循环或其他方式遍历需要巡检的服务器,并调用 Shell 巡检脚本获取巡检结果
- 将巡检结果保存到文件中
import paramiko
# 设置要巡检的服务器列表
SERVERS = ['server1.example.com', 'server2.example.com']
# 创建 SSH 客户端
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 遍历服务器列表并执行巡检
for SERVER in SERVERS:
try:
# 连接到服务器
client.connect(SERVER, username='root', password='password')
# 执行巡检脚本并获取结果
stdin, stdout, stderr = client.exec_command('./巡检.sh')
results = stdout.read().decode('utf-8')
# 保存巡检结果到文件中
with open('巡检结果.txt', 'w') as f:
f.write(results)
except Exception as e:
print(f'巡检服务器 {SERVER} 失败:{e}')
continue
# 关闭 SSH 客户端
client.close()
3. 运行 Python 脚本
- 使用 python 巡检.py 命令运行 Python 脚本
- 脚本将自动调用 Shell 巡检脚本,获取巡检结果并保存到文件中
生成 Excel 文件
1. 安装 OpenPyXL 库
- 使用 pip install openpyxl 命令安装 OpenPyXL 库
2. 编写生成 Excel 文件的 Python 脚本
- 使用文本编辑器创建新文件,如生成_excel.py
3. 编写 Python 脚本内容
- 导入必要的 Python 库,包括 OpenPyXL
- 定义函数来读取巡检结果文件并将其转换为 Excel 格式
- 使用 OpenPyXL 库创建新的 Excel 文件并写入巡检结果
- 保存 Excel 文件
import openpyxl
# 读取巡检结果文件
with open('巡检结果.txt', 'r') as f:
results = f.readlines()
# 创建新的 Excel 工作簿
wb = openpyxl.Workbook()
sheet = wb.active
# 设置表头
sheet['A1'] = '服务器'
sheet['B1'] = '磁盘使用率'
sheet['C1'] = '系统运行时间'
sheet['D1'] = '内存使用情况'
# 将巡检结果写入 Excel 文件
row = 2
for result in results:
server, disk_usage, uptime, memory_usage = result.split(',')
sheet[f'A{row}'] = server
sheet[f'B{row}'] = disk_usage
sheet[f'C{row}'] = uptime
sheet[f'D{row}'] = memory_usage
row += 1
# 保存 Excel 文件
wb.save('巡检结果.xlsx')
4. 运行 Python 脚本
- 使用 python 生成_excel.py 命令运行 Python 脚本
- 脚本将读取巡检结果文件并将其转换为 Excel 格式,并保存为指定的文件名
总结
通过将 Python 和 Shell 集成,我们能够编写自动巡检服务器的脚本。这些脚本可以快速获取巡检结果并生成 Excel 文件,从而提高巡检效率,减少人为失误。运维人员可以将宝贵的时间用于更重要的任务,让服务器保持最佳性能。
常见问题解答
1. 如何定制巡检脚本以满足特定需求?
- 修改巡检.sh 脚本以包含所需的特定巡检命令或脚本。
2. 如何在不使用 SSH 的情况下巡检服务器?
- 探索使用其他协议(如 Telnet、WinRM)或开发自定制的代理程序。
3. 如何自动执行巡检脚本?
- 使用调度工具(如 crontab)定期运行巡检脚本。
4. 如何远程访问需要身份验证的服务器?
- 在 Python 脚本中使用 paramiko 库提供凭据,或者考虑使用密钥对进行 SSH 认证。
5. 如何处理巡检脚本执行期间的异常情况?
- 在 Python 脚本中使用异常处理来处理错误,并提供有意义的错误消息。