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 实践任务
- 使用 SecureCRT 通过 SSH(端口 2222)登录
LinuxDC,安装 Ansible 并配置 SSH 密钥连接。 - 编写 Ansible Playbook 安装并启动
httpd服务。 - 创建 Shell 脚本
/usr/local/bin/backup.sh,配置crontab每天备份/etc。 - 编写 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 工具的使用。这些技能实现高效运维,为后续自动化部署与镜像管理和系统迁移提供脚本化基础。