python脚本自动化部署,数据备份,监控脚本,日志分析,邮件发送,整理了一下以前用过的一些小脚本分享给大家。
1.自动化部署脚本:使用Fabric库编写一个Python脚本来自动化一系列的部署任务,例如代码同步、配置文件管理、服务启动等。以下是一个简单的示例脚本:
from fabric import Connection
# 连接目标主机
c = Connection('target_host')
# 复制本地文件到目标主机
c.put('local_file', '/remote/path')
# 执行远程命令
c.run('sudo apt-get update')
# 启动服务
c.sudo('systemctl start myservice')
2.数据备份脚本:使用paramiko库编写脚本来实现在两台服务器之间传输数据(例如MySQL数据库备份)的功能。以下是一个简单的示例脚本:
import paramiko
# 连接源主机和目标主机
ssh_source = paramiko.SSHClient()
ssh_source.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_source.connect('source_host', username='username', password='password')
ssh_target = paramiko.SSHClient()
ssh_target.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_target.connect('target_host', username='username', password='password')
# 执行备份命令并将备份文件从源主机复制到目标主机
stdin, stdout, stderr = ssh_source.exec_command('mysqldump > db_backup.sql')
sftp = ssh_source.open_sftp()
sftp.get('db_backup.sql', 'db_backup.sql')
sftp.close()
sftp = ssh_target.open_sftp()
sftp.put('db_backup.sql', 'db_backup.sql')
sftp.close()
# 关闭连接
ssh_source.close()
ssh_target.close()
3.系统监控脚本:使用psutil库编写脚本来实现服务器的实时监测,包括CPU、内存、网络和磁盘的情况。以下是一个简单的示例脚本:
import psutil
# 监测CPU利用率
cpu_percent = psutil.cpu_percent(interval=1, percpu=True)
print(f"CPU utilization: {cpu_percent}")
# 监测内存利用率
mem = psutil.virtual_memory()
print(f"Available memory: {mem.available / 1024 / 1024:.2f} MB")
# 监测网络连接
connections = psutil.net_connections(kind='tcp')
print(f"Total TCP connections: {len(connections)}")
# 监测磁盘空间
disk_usage = psutil.disk_usage('/')
print(f"Disk space usage: {disk_usage.used / disk_usage.total:.2%}")
4.日志分析脚本:使用pandas库编写脚本来解析日志文件,并将其传入到DataFrame对象中进行过滤和汇总。以下是一个简单的示例脚本:
import pandas as pd
# 读取日志文件并将其解析到DataFrame对象
df = pd.read_csv('log_file.csv', names=['date', 'time', 'request', 'status', 'bytes'])
# 过滤出响应状态为404的记录
df_404 = df[df.status == 404]
# 统计每小时的请求数量
df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'])
df_hourly = df.set_index('datetime').resample('H')['request'].count()
5.自动化文件处理脚本:使用os库和shutil库编写Python脚本来实现对文件的自动化处理,例如对某个目录下的文件进行重命名、移动、复制等操作。以下是一个简单的示例脚本:
import os
import shutil
# 列出所有文件
files = os.listdir('/path/to/directory')
# 复制文件到另一个目录
for f in files:
if f.endswith('.txt'):
shutil.copy(f, '/path/to/destination')
# 重命名部分文件
for f in files:
if f.startswith('old_'):
new_name = f.replace('old_', 'new_')
os.rename(f, new_name)
# 删除所有空文件夹
for root, dirs, files in os.walk('/path/to/directory'):
for d in dirs:
try:
os.rmdir(os.path.join(root, d))
except OSError:
pass
6.自动化邮件发送脚本:使用smtplib库编写Python脚本来实现对邮件的发送和接收,例如将日志文件或报表作为附件发送给团队成员。以下是一个简单的示例脚本:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
# 邮件配置
sender = '邮箱地址'
recipients = ['邮箱地址', '邮箱地址']
subject = 'Test email'
body = 'This is a test email.'
# 构造消息对象
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = ', '.join(recipients)
msg['Subject'] = subject
# 添加正文
text = MIMEText(body)
msg.attach(text)
# 添加附件
with open('report.pdf', 'rb') as f:
attachment = MIMEApplication(f.read(), _subtype='pdf')
attachment.add_header('Content-Disposition', 'attachment',
filename='report.pdf')
msg.attach(attachment)
# 发送邮件
smtp_server = smtplib.SMTP('邮箱地址')
smtp_server.starttls()
smtp_server.login(sender, 'password')
smtp_server.sendmail(sender, recipients, msg.as_string())
smtp_server.quit()
7.网络扫描脚本:使用nmap库编写Python脚本来实现对一组IP地址的扫描,找出开放了哪些端口以及对应的服务。以下是一个简单的示例脚本:
import nmap
# 创建扫描器对象
nm = nmap.PortScanner()
# 扫描目标IP地址
result = nm.scan(hosts='192.168.0.1/24', arguments='-sS -p 1-1024')
# 输出扫描结果
for host in nm.all_hosts():
print(f"Host: {host}")
for port in nm[host].all_tcp():
print(f"Port: {port}, State: {nm[host]['tcp'][int(port)]['state']}")
8.日志分析与告警脚本:使用Python编写脚本来实现监控日志文件,筛选出关键词并发送报警邮件。以下是一个简单的示例脚本:
import re
import smtplib
from email.mime.text import MIMEText
# 监控日志文件
with open('app.log', 'r') as f:
for line in f:
# 查找关键词
match = re.search('Error:', line)
if match:
# 发送报警邮件
sender = 'monitor@example.com'
recipients = ['admin@example.com']
subject = 'Error detected!'
body = f"Error message: {line}"
message = MIMEText(body)x
message['From'] = sender
message['To'] = ', '.join(recipients)
message['Subject'] = subject
smtp_server = smtplib.SMTP('smtp.example.com')
smtp_server.sendmail(sender, recipients, message.as_string())
smtp_server.quit()
今天先整理这些后面的持续更新中,整理不易,欢迎点赞,收藏转发,关注我每天更新运维小知识。