Appearance
14. 自动化与脚本编写
本章节指导在 RHEL 8.10(主机名 ZSLinux)上使用 SecureCRT 进行自动化和脚本编写,配合 SecureFX 传输脚本文件。内容涵盖 Shell 脚本编写、Ansible 自动化、定时任务管理和实用工具配置,以支持自动化部署和日常运维,全面实用,适合初学者快速掌握和运维人员实践。所有操作在 ZSLinux 环境中测试,确保实验一致性。
14.1 前提条件
- RHEL 8.10 已安装(参考第 1 章),主机名设置为
ZSLinux. - 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
- 使用 SecureFX 传输文件(SFTP 协议).
- 具有 root 或 sudo 权限.
- 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
sshd服务已配置(参考第 6 章).
14.2 自动化工具
14.2.1 配置 Ansible
- 安装 Ansible:bash
dnf install -y ansible # 安装 Ansible 自动化工具 - 配置 SSH 密钥(参考第 6 章):bash
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa # 生成 SSH 密钥对 ssh-copy-id -p 2222 testuser@ZSLinux # 复制公钥到目标主机 - 创建库存文件:bash
vim /etc/ansible/hosts # 编辑 Ansible 库存文件 # 添加: [webservers] ZSLinux ansible_port=2222 ansible_user=testuser - 测试 Ansible 连接:bash
ansible -i /etc/ansible/hosts webservers -m ping # 测试 Ansible 连接
14.2.2 编写 Ansible Playbook
- 创建 Playbook 安装
httpd:bashvim /etc/ansible/playbook.yml # 创建 Playbook 文件 # 添加: - hosts: webservers tasks: - name: Install httpd dnf: name: httpd state: present - name: Start httpd service: name: httpd state: started enabled: yes ansible-playbook /etc/ansible/playbook.yml # 运行 Playbook
14.3 脚本与定时任务
14.3.1 编写 Shell 脚本
- 创建备份脚本:bash
vim /usr/local/bin/backup.sh # 创建备份脚本 # 添加: #!/bin/bash BACKUP_DIR="/backup" DATE=$(date +%F) tar -czf $BACKUP_DIR/etc-$DATE.tar.gz /etc # 备份 /etc 目录 echo "Backup completed: $BACKUP_DIR/etc-$DATE.tar.gz" >> /var/log/backup.log chmod +x /usr/local/bin/backup.sh # 添加执行权限
14.3.2 调试 Shell 脚本
- 测试脚本语法:bash
bash -n /usr/local/bin/backup.sh # 检查脚本语法错误 - 启用调试模式:bash
bash -x /usr/local/bin/backup.sh # 运行脚本并显示调试信息
14.3.3 配置定时任务
- 配置
crontab定时备份:bashcrontab -e # 编辑用户 crontab # 添加: 0 0 * * * /usr/local/bin/backup.sh # 每天 00:00 执行备份 systemctl enable --now crond # 启用并启动 crond 服务 - 配置一次性任务:bash
at now + 1 hour # 安排 1 小时后执行任务 # 输入: /usr/local/bin/backup.sh # 按 Ctrl+D 提交 - 配置
anacron(非连续运行任务):bashvim /etc/anacrontab # 编辑 anacron 配置文件 # 添加: 1 5 backup.daily /usr/local/bin/backup.sh # 每天运行一次,延迟 5 分钟 systemctl enable --now anacron # 启用并启动 anacron 服务
14.3.4 自动化部署脚本
- 创建 Git 部署脚本:bash
vim /usr/local/bin/auto_deploy.sh # 创建 Git 自动化脚本 # 添加: #!/bin/bash LOG_FILE="/var/log/git_deploy.log" echo "$(date '+%Y-%m-%d %H:%M:%S'): Starting deploy" >> $LOG_FILE if git diff-index --quiet HEAD --; then echo "$(date '+%Y-%m-%d %H:%M:%S'): No changes to commit" >> $LOG_FILE else git add . # 添加所有更改 git commit -m "docs: Updated on $(date '+%Y-%m-%d %H:%M:%S')" # 提交更改 git push -u origin main # 推送到远程仓库 echo "$(date '+%Y-%m-%d %H:%M:%S'): Deploy completed" >> $LOG_FILE fi chmod +x /usr/local/bin/auto_deploy.sh # 添加执行权限
14.3.5 使用实用工具
- 安装并使用
fdupes:bashdnf install -y fdupes # 安装 fdupes 工具 fdupes -r /backup # 递归查找重复文件 fdupes -r -d -N /backup # 删除重复文件,保留第一个,无提示
14.4 验证
- 验证 Ansible 配置:bash
ansible -i /etc/ansible/hosts webservers -m ping # 验证 Ansible 连接 systemctl is-active httpd # 验证 httpd 服务状态 - 验证 Shell 脚本:bash
/usr/local/bin/backup.sh # 运行备份脚本 cat /var/log/backup.log # 检查备份日志 - 验证定时任务:bash
crontab -l # 查看 crontab 配置 atq # 查看 at 任务队列 cat /var/log/anacron # 检查 anacron 日志 - 验证 Git 部署:bash
/usr/local/bin/auto_deploy.sh # 运行 Git 部署脚本 cat /var/log/git_deploy.log # 检查部署日志 - 验证
fdupes:bashfdupes -r /backup # 检查重复文件 - 常见问题:
- Ansible 连接失败:检查 SSH 密钥(
~/.ssh/id_rsa) 和库存文件(/etc/ansible/hosts)。 - 脚本失败:运行
bash -n检查语法,或bash -x调试。 - 定时任务未运行:确认
crond或anacron服务状态(systemctl status crond)。
- Ansible 连接失败:检查 SSH 密钥(
14.5 实践任务
- 使用 SecureCRT 登录
ZSLinux,安装 Ansible 并配置 SSH 密钥连接。 - 编写 Ansible Playbook 安装并启动
httpd服务。 - 创建 Shell 脚本
/usr/local/bin/backup.sh,配置crontab每天备份/etc. - 编写 Git 自动化部署脚本并验证日志。
14.6 自测问题
- 问题:如何运行 Ansible Playbook?
- 答案:
ansible-playbook /etc/ansible/playbook.yml
- 答案:
- 问题:如何配置每天运行的定时任务?
- 答案:
crontab -e,添加0 0 * * * /path/to/script
- 答案:
- 问题:如何检查 Git 工作区是否干净?
- 答案:
git diff-index --quiet HEAD --
- 答案:
