在开始自动化运维前,需确保CentOS系统具备基础的开发环境和网络连通性:
sudo yum update -y更新所有软件包至最新版本,修复潜在安全漏洞。wget(下载工具)、vim(文本编辑器)、git(版本控制)等基础工具,例如sudo yum install -y wget vim git。sudo yum install epel-release -y启用。自动化运维工具的选择需结合场景复杂度和团队技能:
paramiko实现SSH、psutil监控系统)。Ansible通过Playbook(YAML格式)定义任务,实现批量配置与管理:
sudo yum install epel-release -y
sudo yum install ansible -y
/etc/ansible/hosts,定义目标主机分组(如Web服务器、数据库服务器):[webservers]
192.168.1.100
192.168.1.101
[databases]
192.168.1.102
deploy_webserver.yml,定义安装Apache、启动服务的任务:---
- hosts: webservers
become: yes # 使用sudo权限
tasks:
- name: Install Apache
yum:
name: httpd
state: present # 确保软件包已安装
- name: Start Apache service
service:
name: httpd
state: started # 启动服务
enabled: yes # 开机自启
ansible-playbook /etc/ansible/deploy_webserver.yml,Ansible会自动连接目标主机并执行任务。Shell脚本适合重复性命令(如备份、系统更新、日志清理):
update_system.sh,内容如下:#!/bin/bash
# 更新所有包并清理缓存
sudo yum update -y && sudo yum clean all
echo "$(date): 系统更新与清理完成" >> /var/log/auto_update.log
backup_webapps.sh,备份/data/webapps目录:#!/bin/bash
SOURCE_DIR="/data/webapps"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/webapps_$DATE.tar.gz"
mkdir -p $BACKUP_DIR
tar -czvf $BACKUP_FILE $SOURCE_DIR
echo "$(date): 备份完成: $BACKUP_FILE" >> /var/log/auto_backup.log
chmod +x update_system.sh backup_webapps.sh赋予执行权限;通过crontab -e添加定时任务(如每天凌晨2点备份):0 2 * * * /path/to/backup_webapps.sh
Python通过第三方库实现跨平台和复杂逻辑(如系统监控、应用部署):
psutil库采集CPU/内存使用率,超过阈值发送邮件:import psutil
import smtplib
from email.mime.text import MIMEText
def send_alert(subject, message):
sender = "admin@example.com"
receivers = ["devops@example.com"]
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = ", ".join(receivers)
server = smtplib.SMTP('smtp.example.com')
server.sendmail(sender, receivers, msg.as_string())
server.quit()
cpu_usage = psutil.cpu_percent(interval=1)
mem_usage = psutil.virtual_memory().percent
if cpu_usage > 80 or mem_usage > 80:
send_alert("系统资源告警", f"CPU使用率: {cpu_usage}%, 内存使用率: {mem_usage}%")
fabric库实现远程代码部署(如拉取Git代码、安装依赖):from fabric import Connection
def deploy_app():
conn = Connection(host='user@remote-server', connect_kwargs={'key_filename': '/path/to/key'})
conn.run('git pull origin main') # 拉取最新代码
conn.run('pip install -r requirements.txt') # 安装依赖
conn.run('systemctl restart myapp') # 重启服务
print("应用部署完成")
对于定期执行的脚本(如备份、日志清理、监控检查),使用cron工具:
crontab -e进入编辑界面。0 2 * * * /path/to/backup_database.sh0 3 * * 1 /path/to/clean_logs.shgit管理脚本与Playbook,例如将脚本存放在/opt/scripts目录,运行git init初始化仓库,定期提交变更(git commit -m "add backup script")。set -e(出错立即退出)、trap(捕获信号)等逻辑,例如:#!/bin/bash
set -e # 任何命令失败则退出脚本
trap 'echo "Error occurred at line $LINENO"; exit 1' ERR # 捕获错误并输出行号
>> /var/log/auto_script.log 2>&1),方便后续排查问题。通过以上步骤,可从零开始构建CentOS系统的自动化运维体系,覆盖从基础任务到复杂场景的需求。根据实际业务规模,可选择单一工具(如Ansible)或多工具组合(如Shell+Python+Cron),逐步提升运维效率。