首页主机资讯Python在Ubuntu上的自动化运维如何操作

Python在Ubuntu上的自动化运维如何操作

时间2026-01-16 15:05:03发布访客分类主机资讯浏览1125
导读:在 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_systemfab -H s1 deploy
    • 连接与安全
      • 建议使用 SSH 密钥(在 connect_kwargs={ "key_filename": "/path/to/key"} 指定)
      • 如需密码,可在 connect_kwargs={ "password": "..."} ,但密钥更安全
  • 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 nginxsalt '*' service.enable nginx
  • 选型建议
    • 少量主机与轻量任务:Fabric + cron/systemd
    • 多机统一配置与合规:SaltStack/Ansible
    • 嵌入平台与复杂流程:Paramiko 自研编排
  • 安全与合规
    • 全链路 SSH 密钥,禁用口令登录
    • 最小权限原则与命令白名单
    • 审计日志集中化(如 syslog/ELK),敏感信息使用 Secrets Manager 管理。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Python在Ubuntu上的自动化运维如何操作
本文地址: https://pptw.com/jishu/781535.html
Ubuntu下Python并发编程如何实现 Python在Ubuntu上的日志管理如何实现

游客 回复需填写必要信息