CentOS环境下Python脚本编写与自动化运维实践指南

在现代IT运维中,自动化已经成为提高效率、降低成本的关键手段。Python以其简洁的语法和强大的库支持,成为了自动化运维的首选语言。本文将详细介绍在CentOS环境下如何编写Python脚本,并探讨其在自动化运维中的应用。

一、环境准备

  1. 安装Python CentOS默认安装的是Python2,但为了更好地支持现代Python库,建议安装Python3。
   sudo yum install epel-release
   sudo yum install python3
  1. 安装PyCharm PyCharm是一个强大的Python集成开发环境(IDE),可以极大提高开发效率。
   sudo yum install snapd
   sudo snap install pycharm-community --classic
  1. 安装必要的库 根据需要安装常用的Python库,如requestsparamikopandas等。
   pip3 install requests paramiko pandas

二、Python脚本基础

  1. Hello World示例
   #!/usr/bin/env python3
   print("Hello, World!")

将上述代码保存为hello.py,并赋予执行权限:

   chmod +x hello.py
   ./hello.py
  1. 命令行参数处理

使用argparse模块处理命令行参数:

   import argparse

   parser = argparse.ArgumentParser(description="命令行参数示例")
   parser.add_argument("-u", "--user", help="用户名")
   parser.add_argument("-p", "--port", type=int, help="端口号")

   args = parser.parse_args()

   print(f"用户名: {args.user}")
   print(f"端口号: {args.port}")

三、常用自动化脚本案例

  1. 批量遍历目录文件并修改访问时间
   import os
   import time

   path = "/path/to/directory"
   dirs = os.listdir(path)

   for file in dirs:
       file_path = os.path.join(path, file)
       os.utime(file_path, (time.time(), time.time()))
       print(f"修改了文件: {file_path}")
  1. 检测指定端口状态
   import socket

   def check_port(ip, port):
       try:
           s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
           s.settimeout(1)
           result = s.connect_ex((ip, port))
           s.close()
           return result == 0
       except:
           return False

   ip = "192.168.1.1"
   port = 80

   if check_port(ip, port):
       print(f"{ip}:{port} 端口开放")
   else:
       print(f"{ip}:{port} 端口关闭")
  1. 批量执行CMD命令
   import subprocess

   commands = [
       "ls -a",
       "df -h",
       "free -m"
   ]

   for cmd in commands:
       result = subprocess.run(cmd, shell=True, text=True, capture_output=True)
       print(f"命令: {cmd}")
       print(f"输出: {result.stdout}")

四、自动化运维实践

  1. 钉钉报警

使用钉钉机器人发送报警信息:

   import requests
   import json

   def send_dingtalk_message(webhook_url, message):
       headers = {"Content-Type": "application/json"}
       data = {
           "msgtype": "text",
           "text": {
               "content": message
           }
       }
       response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
       return response.json()

   webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=your_token"
   message = "服务器异常,请及时处理!"

   result = send_dingtalk_message(webhook_url, message)
   print(result)
  1. 自动重启服务
   import subprocess

   def restart_service(service_name):
       restart_cmd = f"systemctl restart {service_name}"
       result = subprocess.run(restart_cmd, shell=True, text=True, capture_output=True)
       if result.returncode == 0:
           print(f"{service_name} 服务重启成功")
       else:
           print(f"{service_name} 服务重启失败: {result.stderr}")

   service_name = "nginx"
   restart_service(service_name)

五、CI/CD与DevOps实践

  1. 使用GitHub Actions进行自动化构建和部署

在GitHub仓库中创建.github/workflows/main.yml文件:

   name: Python CI/CD

   on:
     push:
       branches:
         - main

   jobs:
     build:
       runs-on: ubuntu-latest
       steps:
         - uses: actions/checkout@v2
         - name: Set up Python
           uses: actions/setup-python@v2
           with:
             python-version: '3.8'
         - name: Install dependencies
           run: |
             pip install -r requirements.txt
         - name: Run tests
           run: |
             python test.py
  1. 使用Docker实现应用容器化

编写Dockerfile

   FROM python:3.8-slim
   WORKDIR /app
   COPY . /app
   RUN pip install -r requirements.txt
   CMD ["python", "app.py"]

使用docker-compose管理容器:

   version: '3'
   services:
     app:
       build: .
       ports:
         - "8000:8000"

六、总结

Python在CentOS环境下的脚本编写与自动化运维实践中具有广泛的应用。通过掌握基本的Python语法、常用库的使用,以及结合CI/CD和DevOps工具,可以极大地提高运维工作的效率和可靠性。希望本文能为您的自动化运维之路提供有益的参考。