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自動化運維,覆蓋系統監控、遠程管理、部署、文件處理等常見場景,提升運維效率與可靠性。