Python在Ubuntu上的自动化运维如何操作
导读:在 Ubuntu 上使用 Python 做自动化运维的实操指南 一 环境准备与基础脚本 安装与虚拟环境 更新索引并安装基础工具:sudo apt update && sudo apt install -y python3...
在 Ubuntu 上使用 Python 做自动化运维的实操指南
一 环境准备与基础脚本
- 安装与虚拟环境
- 更新索引并安装基础工具:
sudo apt update & & sudo apt install -y python3 python3-pip - 使用 venv 隔离依赖:
python3 -m venv venv & & source venv/bin/activate - 安装常用库:
pip install paramiko scp psutil requests
- 更新索引并安装基础工具:
- 远程执行与文件传输(Paramiko 示例)
- 建立 SSH、执行命令、SFTP 上传/下载,适合细粒度控制与自定义流程。
- 本地服务自愈脚本(systemd 就绪)
- 示例:检测并重启服务
# check_service.py import subprocess def check_service(service: str) -> None: res = subprocess.run( ["sudo", "systemctl", "is-active", service], capture_output=True, text=True ) if res.stdout.strip() != "active": subprocess.run(["sudo", "systemctl", "restart", service]) if __name__ == "__main__": check_service("nginx") - 说明:脚本需具备 sudo 权限(建议配置 NOPASSWD 或授予相应能力),后续用 systemd 托管运行。
- 示例:检测并重启服务
二 将脚本做成系统服务与定时任务
- 以 systemd 托管 Python 脚本
- 创建服务文件:
sudo nano /etc/systemd/system/my_service.service[Unit] Description=My Python Service After=network.target [Service] User=your_username ExecStart=/path/to/venv/bin/python /path/to/your_script.py Restart=always RestartSec=10 Environment="PATH=/path/to/venv/bin:$PATH" [Install] WantedBy=multi-user.target - 启用与启动:
sudo systemctl daemon-reload & & sudo systemctl enable --now my_service - 查看状态:
sudo systemctl status my_service
- 创建服务文件:
- 定时执行(cron)
- 编辑计划任务:
crontab -e - 示例(每天 01:00 执行):
0 1 * * * /path/to/venv/bin/python /path/to/your_script.py
- 编辑计划任务:
- 使用 Conda 时的 ExecStart 示例
- 将
ExecStart改为 Conda 环境解释器路径:/home/your_username/miniconda3/envs/< env> /bin/python /path/to/script.py
- 将
- 安全建议
- 为脚本创建专用系统用户,按需授予 sudo 权限(推荐仅对特定命令 NOPASSWD)
- 日志输出到文件并配置 logrotate,便于审计与排错。
三 远程批量执行与自动化部署
- Fabric 2 快速上手(推荐)
- 安装:
pip install fabric - 单机任务
# fabfile.py from fabric import Connection def whoami(c): result = c.run("whoami", hide=True) print("当前用户:", result.stdout.strip())- 运行:
fab -H your_server_ip whoami
- 运行:
- 批量任务
# fabfile.py from fabric import task, SerialGroup @task def update_system(c): c.run("sudo apt update & & sudo apt upgrade -y", hide=True) c.run("sudo apt autoremove -y", hide=True) print("系统更新完成") @task def deploy(c): c.run("mkdir -p /var/www/my_site") c.put("local/path/", "/var/www/my_site/") c.run("chmod -R 755 /var/www/my_site")- 运行:
fab -H s1,s2,s3 update_system或fab -H s1 deploy
- 运行:
- 连接与安全
- 建议使用 SSH 密钥(在
connect_kwargs={ "key_filename": "/path/to/key"}指定) - 如需密码,可在
connect_kwargs={ "password": "..."},但密钥更安全
- 建议使用 SSH 密钥(在
- 安装:
- Paramiko 细粒度控制(适合嵌入现有系统)
- 见上文“远程执行与文件传输”示例,便于与数据库、消息队列、内部平台集成。
四 监控与告警实战示例
- 资源监控与邮件告警(psutil + SMTP)
# monitor.py import psutil, smtplib from email.mime.text import MIMEText from datetime import datetime CPU_THRESHOLD = 80.0 MEM_THRESHOLD = 80.0 SMTP_HOST = "smtp.example.com" SMTP_PORT = 587 SMTP_USER = "your_email@example.com" SMTP_PASS = "your_password" FROM = "your_email@example.com" TO = "alert_recipient@example.com" def send_alert(cpu: float, mem: float): body = f"告警时间: { datetime.now()} \nCPU使用率: { cpu} %\n内存使用率: { mem} %" msg = MIMEText(body, "plain", "utf-8") msg["Subject"] = "服务器性能告警" msg["From"] = FROM msg["To"] = TO with smtplib.SMTP(SMTP_HOST, SMTP_PORT) as s: s.starttls() s.login(SMTP_USER, SMTP_PASS) s.send_message(msg) def main(): cpu = psutil.cpu_percent(interval=1) mem = psutil.virtual_memory().percent if cpu > CPU_THRESHOLD or mem > MEM_THRESHOLD: send_alert(cpu, mem) if __name__ == "__main__": main() - 运行方式
- 长期守护:按“systemd 托管”方式运行
- 间歇检查:加入 cron(如每 5 分钟执行一次)。
五 规模化与进阶方案
- 配置管理与编排
- 使用 SaltStack 进行大规模主机管理与批量任务:
- 安装:
sudo apt install salt-master(Master)、sudo apt install salt-minion(Minion) - Minion 配置:
echo "master: < MASTER_IP> " | sudo tee /etc/salt/minion - 启动:
sudo systemctl enable --now salt-minion - 连通性测试:
salt '*' test.ping - 常用操作:
- 远程命令:
salt '*' cmd.run 'df -h' - 安装软件:
salt '*' pkg.install nginx - 文件分发:
salt '*' cp.get_file salt://path/to/file /dest/path - 服务管理:
salt '*' service.start nginx、salt '*' service.enable nginx
- 远程命令:
- 安装:
- 使用 SaltStack 进行大规模主机管理与批量任务:
- 选型建议
- 少量主机与轻量任务:Fabric + cron/systemd
- 多机统一配置与合规:SaltStack/Ansible
- 嵌入平台与复杂流程:Paramiko 自研编排
- 安全与合规
- 全链路 SSH 密钥,禁用口令登录
- 最小权限原则与命令白名单
- 审计日志集中化(如 syslog/ELK),敏感信息使用 Secrets Manager 管理。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Python在Ubuntu上的自动化运维如何操作
本文地址: https://pptw.com/jishu/781535.html
