RCHE 学习指南(三)
原文:Red Hat Certified Engineer (RHCE) Study Guide
协议:CC BY-NC-SA 4.0
十五、使用 Ansible 管理计划任务
在《RHCE 学习指南》的最后一章,我们将重点放在最后的小考试目标上,你需要知道如何在 Linux 下用 Ansible 创建和管理预定任务。这可能与 atd 或 crond 有关,其中 atd 非常适合调度 ad hoc Linux 命令,而 crond 适合调度需要定期运行的作业。为简单起见,您可以只针对 Ansible 控制器,但我们将针对所有主机,并在示例中包括 CentOS 和 Ubuntu。
使用 ATD 的特定 Linux 作业
在的守护进程(atd)允许您在 Linux 中调度需要不定期运行的作业,甚至可能只运行一次,比如当您需要在假期期间调度服务器之间的数据迁移时。
如果最低限度安装 CentOS 8 和 Ubuntu 18.04,则不会安装该服务。当然,我们将添加这一功能,并确保它在创建工作之前运行。创建一个安装和配置 atd 的角色是值得的,因此我们可以从任何需要在创建一个预定的作业的剧本中引用这个角色。
创建负责管理 ATD 的角色
我们应该是现在用ansible-galaxy创造角色的专家,这也是一个伟大的记忆慢跑者。
$ ansible-galaxy role init /home/tux/.ansible/roles/atd
- Role $HOME/.ansible/roles/atd was created successfully
$ vim $HOME/.ansible/roles/atd/tasks/main.yml
---
- name: Install AT
package:
name: at
state: present
- name: Manage ATD
service:
name: atd
enabled: true
state: started
Listing 15-1Creating the ATD Role
在 At 创造就业机会的剧本
atd 的角色很简单,因为包和服务名称在我们的发行版中是一致的。创建这个角色还是很值得的,因为我们可能需要创建几个不同的剧本来安排在的工作。这个角色意味着我们可以利用每个必要剧本中的一段代码。RHCSA 更详细地介绍了使用处的创建调度任务,但可以说处的用于调度可能只需要运行一次而不是定期运行的作业。我们可以使用完整的日期和时间或缩写来安排作业,例如星期二代表下星期二。我们在 Ansible 中没有太多的灵活性,而且我们被限制在一定数量的单元内。我们指定作业应该基于指定单元的计数来运行。如果我们想要一个作业明天运行,我们将指定count: 1和units: days。
$ mkdir $HOME/ansible/at ; cd $HOME/ansible/at
$ vim at.yml
---
- name: Create at job
hosts: all
become: true
gather_facts: false
roles:
- atd
tasks:
- name: backup users database tomorrow
at:
command: 'tar -czf /root/users.tgz /etc/passwd /etc/group /etc/shadow'
count: 1
units: days
unique: true
$ ansible-playbook at.yml
$ sudo atq
Mon Dec 14 11:53:00 2020 a root
Listing 15-2Creating at Jobs with Ansible
启用此工单的唯一性将确保我们在的工单数据库中只有一次此工单的列表。如果未设置此项,则每次执行剧本时都会创建作业。
使用 Cron 创建常规作业
使用 cron 调度常规作业在 Linux 中非常常见,服务和工具是默认安装的。如果我们需要为那些相同的文件创建一个常规备份,而不是一个单独的备份,我们可以使用 cron 。以下剧本将在 /etc/cron.d/ 目录下创建命名文件,并将在周一至周五上午 5:30 运行。
$ mkdir $HOME/ansible/cron ; cd $HOME/ansible/cron
$ vim cron.yml
---
- name: Manage Cron Entries
hosts: all
gather_facts: false
become: true
tasks:
- name: Backup user database
cron:
name: Backup Users
hour: 5
minute: 30
weekday: 1-5
user: root
job: 'tar -czf /root/user.tgz /etc/passwd /etc/shadow'
cron_file: user_backup
$ ansible-playbook cron.yml
$ cat /etc/cron.d/user_backup
#Ansible: Backup Users
30 5 * * 1-5 root tar -czf /root/user.tgz /etc/passwd /etc/shadow
Listing 15-3Creating cron Entries with Ansible
如您所见,演示结束时在 /etc/cron.d 中列出了新创建的条目。我们分配给 cron 作业的名称在文件中显示为一个注释,使它容易被我们自己识别和回答。
摘要
你才刚刚开始你余下的开发工作或系统管理生涯。从这本书开始,你已经走了很长一段路,现在你已经准备好为自己的成功而奋斗。你掌握着自己未来的钥匙。在这最后一章中,我们能够在查看预定任务时整理一些考试目标的松散部分。您学习了如何使用 Ansible 中的 at 模块来处理不规则作业,以及如何使用 cron Ansible 模块来定期执行这些作业。
你现在应该确保你练习了我们在本章中展示的例子;一如既往,是你付出的努力决定了你的成功。我还建议您查看每一章,看看在不参考完整的分步说明的情况下,您可以完成多少演示。祝你好运,谢谢。