CentOS上Python自动化运维实现指南
在CentOS上开展Python自动化运维前,需先搭建基础环境:
sudo yum install python3
安装Python 3(建议版本≥3.6),并验证安装:python3 --version
。sudo yum install python3-pip
安装,验证:pip3 --version
。python3 -m venv myenv
创建虚拟环境,激活:source myenv/bin/activate
。paramiko
(SSH远程连接)、psutil
(系统监控)、smtplib
(邮件告警)、fabric
(自动化部署)等。使用psutil
库获取系统资源状态(CPU、内存、磁盘),并通过邮件发送告警。示例代码:
import psutil
import smtplib
from email.mime.text import MIMEText
def get_system_info():
"""获取系统资源使用率"""
return {
'cpu': psutil.cpu_percent(interval=1),
'memory': psutil.virtual_memory().percent,
'disk': psutil.disk_usage('/').percent
}
def send_alert(subject, message):
"""发送邮件告警"""
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = 'your_email@example.com'
msg['To'] = 'admin@example.com'
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('your_email@example.com', 'your_password')
server.sendmail('your_email@example.com', ['admin@example.com'], msg.as_string())
def monitor():
"""监控并触发告警"""
system_info = get_system_info()
if system_info['cpu'] > 80 or system_info['memory'] > 80 or system_info['disk'] > 80:
alert_msg = f"服务器资源告警:\nCPU使用率:{system_info['cpu']}%\n内存使用率:{system_info['memory']}%\n磁盘使用率:{system_info['disk']}%"
send_alert('CentOS服务器资源告警', alert_msg)
if __name__ == '__main__':
monitor()
说明:脚本每分钟运行一次(通过crontab配置),当CPU、内存或磁盘使用率超过80%时,向管理员发送邮件告警。
使用paramiko
库实现SSH远程连接,执行命令或传输文件。示例代码:
import paramiko
def remote_execute(hostname, username, password, command):
"""远程执行命令"""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port=22, username=username, password=password)
stdin, stdout, stderr = ssh.exec_command(command)
output = stdout.read().decode()
error = stderr.read().decode()
ssh.close()
return output, error
def remote_transfer(hostname, username, password, local_file, remote_path):
"""SFTP文件传输(上传)"""
transport = paramiko.Transport((hostname, 22))
transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(local_file, remote_path)
sftp.close()
transport.close()
# 使用示例
output, _ = remote_execute('192.168.1.100', 'root', 'password', 'ls -l /tmp')
print(output)
remote_transfer('192.168.1.100', 'root', 'password', '/local/monitor.py', '/remote/monitor.py')
说明:可用于批量执行远程命令(如重启服务)、传输配置文件或脚本,适用于多服务器管理。
使用fabric
库简化远程部署流程(如代码拉取、依赖安装、服务重启)。示例代码:
from fabric import Connection
def deploy_app():
"""自动化部署Django应用"""
conn = Connection(
host='192.168.1.100',
user='root',
connect_kwargs={'password': 'password'}
)
with conn.cd('/var/www/myapp'):
conn.run('git pull origin main') # 拉取最新代码
conn.run('pip install -r requirements.txt') # 安装依赖
conn.run('python manage.py migrate') # 数据库迁移
conn.run('systemctl restart gunicorn') # 重启服务
conn.close()
if __name__ == '__main__':
deploy_app()
说明:通过fabric.Connection
建立SSH连接,执行一系列部署命令,实现“一键部署”,减少人工操作错误。
使用os
和shutil
库实现批量文件操作(如重命名、备份)。示例代码:
import os
import shutil
def batch_rename(folder_path, old_prefix, new_prefix):
"""批量重命名文件"""
for filename in os.listdir(folder_path):
if filename.startswith(old_prefix):
new_name = filename.replace(old_prefix, new_prefix)
os.rename(
os.path.join(folder_path, filename),
os.path.join(folder_path, new_name)
)
print(f"已将{folder_path}下以{old_prefix}开头的文件重命名为{new_prefix}_开头")
def backup_files(src_dir, dest_dir):
"""批量备份文件"""
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
for file in os.listdir(src_dir):
src_file = os.path.join(src_dir, file)
if os.path.isfile(src_file):
shutil.copy(src_file, dest_dir)
print(f"已将{src_dir}下的文件备份到{dest_dir}")
# 使用示例
batch_rename('/var/log', 'app', 'app_backup') # 将/var/log下以app开头的文件重命名
backup_files('/var/www/static', '/backup/static') # 备份静态文件
说明:适用于日志归档、配置文件备份等场景,减少手动复制工作量。
使用crontab
设置周期性任务,让Python脚本自动运行。操作步骤:
crontab -e
。* * * * * /usr/bin/python3 /path/to/monitor.py >> /var/log/monitor.log 2>&1
说明:* * * * *
表示每分钟执行一次,>> /var/log/monitor.log
将脚本输出追加到日志文件,2>&1
将错误输出重定向到标准输出。try-except
捕获异常,通过logging
库记录日志(如logging.basicConfig(filename='app.log', level=logging.INFO)
),便于排查问题。os.getenv('DB_PASSWORD')
)或加密工具(如cryptography
库)管理敏感信息。通过以上步骤,可在CentOS上实现Python自动化运维,覆盖系统监控、远程管理、部署、文件处理等常见场景,提升运维效率与可靠性。