跳转至

27. 自动化与脚本编写

本章节指导在 RHEL 9(主机名 LinuxDC)上使用 SecureCRT 进行自动化和脚本编写,配合 SecureFX 传输脚本文件。内容涵盖 Shell 脚本编写、Ansible 自动化、定时任务管理和实用工具配置,以支持自动化部署和日常运维,全面实用,适合初学者快速掌握和运维人员实践。所有操作在 LinuxDC 环境中测试,确保实验一致性。


27.1 前提条件

  • RHEL 9 已安装(参考第 1 章),主机名设置为 LinuxDC
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 9 章)。
  • 使用 SecureFX 传输文件(SFTP 协议)。
  • 具有 root 或 sudo 权限。
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 2 和第 5 章)。
  • sshd 服务已配置(参考第 9 章)。

💡 提示:自动化脚本应测试在隔离环境中,以避免生产影响。在 RHEL 10 中,Ansible 支持更多内置 AI 辅助的 Playbook 生成和优化,提升自动化效率。


27.2 自动化工具

27.2.1 Shell 脚本编写

  • 创建简单备份脚本:

    vim /usr/local/bin/backup.sh
    # 示例内容:
    #!/bin/bash
    BACKUP_DIR="/backup/$(date +%F)"
    mkdir -p $BACKUP_DIR
    rsync -av /etc $BACKUP_DIR/etc  # 备份 /etc
    tar -czvf $BACKUP_DIR/var.tar.gz /var  # 备份 /var
    find /backup -mtime +7 -exec rm -rf {} \;  # 删除 7 天前备份
    

  • 赋予执行权限:

    chmod +x /usr/local/bin/backup.sh
    /usr/local/bin/backup.sh  # 测试运行
    

🧠 知识点:Shell 脚本使用 #!/bin/bash 指定解释器,支持变量和条件(如 if [ -d dir ]; then)。

27.2.2 Ansible 自动化

  • 安装 Ansible:

    dnf install -y ansible  # 安装 Ansible
    

  • 配置库存文件:

    vim /etc/ansible/hosts
    # 添加:
    [webservers]
    192.168.1.101 ansible_user=testuser ansible_ssh_private_key_file=~/.ssh/id_rsa
    

  • 配置 SSH 密钥连接(生成并复制密钥):

    ssh-keygen -t ed25519 -C "ansible@LinuxDC"  # 生成密钥
    ssh-copy-id testuser@192.168.1.101  # 复制公钥到远程主机
    ansible all -m ping  # 测试连接
    

  • 编写 Playbook(示例:安装 httpd):

    vim /etc/ansible/install-httpd.yml
    # 示例内容:
    ---
    - name: Install and start httpd
      hosts: webservers
      become: yes
      tasks:
        - name: Install httpd
          dnf:
            name: httpd
            state: latest
        - name: Start httpd
          service:
            name: httpd
            state: started
            enabled: yes
    ansible-playbook /etc/ansible/install-httpd.yml  # 运行 Playbook
    

🧠 知识点:Ansible 使用 YAML Playbook,无代理架构。验证:ansible-playbook --syntax-check 检查语法。

💡 提示:在 RHEL 10 中,Ansible 集成更多事件驱动自动化,支持实时响应系统变化。

27.2.3 定时任务管理(cron)

  • 编辑 crontab:

    crontab -e
    # 添加:
    0 0 * * * /usr/local/bin/backup.sh  # 每天 00:00 执行备份
    

  • 查看任务:

    crontab -l  # 列出当前用户任务
    

🧠 知识点:cron 格式:分钟 小时 日 月 周 命令。系统任务:/etc/crontab/etc/cron.d/

27.2.4 实用工具配置(Git 自动化部署脚本)

  • 安装 Git:

    dnf install -y git  # 安装 Git
    

  • 创建 Git 部署脚本:

    vim /usr/local/bin/git-deploy.sh
    # 示例内容:
    #!/bin/bash
    REPO_DIR="/var/www/myapp"
    cd $REPO_DIR
    git pull origin main  # 拉取更新
    if git diff-index --quiet HEAD --; then
        echo "No changes"
    else
        systemctl restart myapp.service  # 重启服务
    fi
    logger "Git deploy completed"  # 记录日志
    

  • 配置权限并测试:

    chmod +x /usr/local/bin/git-deploy.sh
    /usr/local/bin/git-deploy.sh  # 测试
    

🧠 知识点:Git 脚本检查变更(diff-index),集成服务重启。


27.3 常见问题与排查

🔍 故障排查

  • 问题 1:Shell 脚本执行失败
    解决:检查权限(ls -l)、语法(bash -n script.sh)、日志(/var/log/messages)。

  • 问题 2:Ansible 连接错误
    解决:验证库存(ansible-inventory --list)、SSH 密钥(ssh -v user@host)。

  • 问题 3:cron 未运行
    解决systemctl status crond,检查 crontab(crontab -l)、日志(grep CRON /var/log/cron)。

  • 问题 4:Git pull 失败
    解决:检查仓库(git status)、凭证(git config --list)。


27.4 实践任务

  1. 使用 SecureCRT 通过 SSH(端口 2222)登录 LinuxDC,安装 Ansible 并配置 SSH 密钥连接。
  2. 编写 Ansible Playbook 安装并启动 httpd 服务。
  3. 创建 Shell 脚本 /usr/local/bin/backup.sh,配置 crontab 每天备份 /etc
  4. 编写 Git 自动化部署脚本并验证日志。

检查点:脚本执行成功,Playbook 部署正常,cron 任务列出。


27.5 自测问题

  • 问题 1:如何运行 Ansible Playbook?
    答案ansible-playbook /etc/ansible/playbook.yml

  • 问题 2:如何配置每天运行的定时任务?
    答案crontab -e,添加 0 0 * * * /path/to/script

  • 问题 3:如何检查 Git 工作区是否干净?
    答案git diff-index --quiet HEAD --


🧾 总结
本章完整介绍了 RHEL 9 自动化与脚本编写的核心操作,包括 Shell、Ansible、cron 和 Git 工具的使用。这些技能实现高效运维,为后续自动化部署与镜像管理和系统迁移提供脚本化基础。