Ansible Cron 模块
发布于2026-08-13 阅读(0)
{"position":0,"title":"介绍","layout":"doc-fullscreen","text":"## 介绍nn欢迎来到 Ansible Cron 模块实验!在这个实验中,你将学习如何使用 Ansible Cron 模块自动化任务调度。cron 系统是类 Unix 操作系统中基于时间的作业调度器,它允许用户安排命令或脚本在指定的时间或间隔自动运行。nn通过这个实验,你将学习如何使用 Ansible 创建、管理和删除 cron 作业。练习从简单配置逐步过渡到更复杂的配置,让你逐步提升使用 Ansible Cron 模块的技能。在这个实验结束时,你将获得使用 Ansible 以一致、自动化的方式调度任务的实践经验。n","need_verify":false,"has_solution":false},{"position":1,"title":"创建一个简单的 Cron 作业","layout":"doc-workbench-split","text":"## 创建一个简单的 Cron 作业nn在这一步中,你将使用 Ansible Cron 模块创建你的第一个 cron 作业。该 cron 作业将定期执行一个简单的 shell 脚本。nn### 理解 Cronnn在开始之前,让我们先了解一下什么是 cron。Cron 是类 Unix 操作系统中基于时间的作业调度器,它允许用户安排命令或脚本在指定的时间或间隔自动运行。Cron 作业对于自动化系统维护任务、备份或任何重复性任务非常有用。nn### 创建 Ansible Playbooknn首先,你需要创建一个 Ansible playbook 来设置 cron 作业。在 WebIDE 中,通过点击文件资源管理器面板中的“New File”按钮,在 `/home/labex/project/cron_mod在 `ansible_playbook.yaml` 路径下创建一个新文件。nnnn把下面的内容写入文件中:nn```yamln- hosts: localhostn tasks:n - name: Create a simple cron jobn cron:n name: my_cron_jobn minute: "*/5"n job: /home/labex/project/script.shn```nn下面来拆解一下这个 playbook 的各个部分:nn- `hosts: localhost` - 这表示 playbook 会在本地机器上执行。n- `tasks` - 这里列出的是需要执行的任务。n- `cron` - 这是 Ansible 中用于管理 cron 作业的模块。n- `name: my_cron_job` - 这是给 cron 作业起的描述性名称,方便在 crontab 里快速识别。n- `minute: "*/5"` - 这表示任务每 5 分钟执行一次。`*/5` 这种写法的意思是“每一个能被 5 整除的分钟”(0、5、10、15 等)。n- `job: /home/labex/project/script.sh` - 这里指定了 cron 作业要执行的命令或脚本。nn### 创建 Shell 脚本nn接下来,需要创建这个 cron 作业要调用的 shell 脚本。在 WebIDE 中,在 `/home/labex/project/script.sh` 路径下创建一个新文件。nn将以下内容输入到脚本文件中:nn```bashn#!/bin/bashnecho "This is a simple script." >> /home/labex/project/cron_output.logndate >> /home/labex/project/cron_output.logn```nn这个简单的脚本每次运行时都会将一条消息和当前日期追加到一个日志文件中。nn### 使脚本可执行nn在运行 playbook 之前,你需要使脚本可执行。在 WebIDE 中打开一个终端,并运行以下命令:nn```bashnchmod +x /home/labex/project/script.shn```nn### 运行 Ansible Playbooknn现在,运行 Ansible playbook 来创建 cron 作业。在终端中执行以下命令:nn```bashncd /home/labex/projectnansible-playbook cron_module_playbook.yamln```nn你应该会看到类似以下的输出:nn```n[WARNING]: No inventory was parsed, only implicit localhost is a vailablen[WARNING]: provided hosts list is empty, only localhost is a vailable. Note thatnthe implicit localhost does not match 'all'nnPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Create a simple cron job] ************************************************nchanged: [localhost]nnPLAY RECAP *********************************************************************nlocalhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn`changed: [localhost]` 这一行表明 cron 作业已成功创建。nn### 验证 Cron 作业nn要验证 cron 作业是否已创建,请使用以下命令检查系统上的 crontab:nn```bashncrontab -ln```nn你应该会看到类似以下的输出:nn```n#Ansible: my_cron_jobn*/5 * * * * /home/labex/project/script.shn```nn`#Ansible: my_cron_job` 这一行是 Ansible 添加的注释,用于识别 cron 作业。`*/5 * * * *` 部分表示调度时间(每 5 分钟),`/home/labex/project/script.sh` 是要执行的命令。nn恭喜!你已成功使用 Ansible Cron 模块创建了一个 cron 作业。该作业将每 5 分钟运行一次脚本。n","need_verify":true,"has_solution":false},{"position":2,"title":"使用自定义时间调度任务","layout":"doc-workbench-split","text":"## 使用自定义时间调度任务nn在这一步中,你将学习如何安排一个 cron 作业在特定时间运行,而不是按固定间隔运行。这对于需要在一天中的特定时间执行的任务非常有用,例如备份、数据处理或生成报告。nn### 理解 Cron 时间格式nncron 时间格式由五个字段组成,分别表示:nn1. 分钟(0 - 59)n2. 小时(0 - 23)n3. 每月的日期(1 - 31)n4. 月份(1 - 12)n5. 星期几(0 - 7,其中 0 和 7 都代表星期日)nn当你为每个字段指定一个值时,cron 作业将在所有条件都匹配时运行。例如,`0 9 * * *` 表示“每天上午 9:00 运行”(第 9 小时的第 0 分钟,每月的任何一天,任何月份,星期几不限)。nn### 修改 Ansible Playbooknn现在,让我们修改现有的 playbook 来创建一个在特定时间运行的新 cron 作业。在 WebIDE 中打开 `/home/labex/project/cron_module_playbook.yaml` 文件,并将其内容替换为以下内容:nn```yamln- hosts: localhostn tasks:n - name: Schedule a task with custom timen cron:n name: custom_cron_jobn minute: "0"n hour: "9"n job: /home/labex/project此 playbook 的更改包括:
- `name: custom_cron_job` - 这是在创建一个名称不同的新 cron 作业。
- `minute: "0"` - 这会把作业设置为在第 0 分钟,也就是整点运行。
- `hour: "9"` - 这会把作业设置为在上午 9 点运行。
其余字段(每月的日期、月份、星期几)都没有指定,这就意味着它们默认是 `*`,也就是任意值。因此,这个作业会在每天上午 9:00 执行。
运行修改后的 Playbook
现在,运行修改后的 Ansible playbook 来创建新的 cron 作业。在终端中执行以下命令:
```bash
cd /home/labex/project
ansible-playbook cron_module_playbook.yaml
```
你应该会看到类似下面的输出:
```text
[WARNING]: No inventory was parsed, only implicit localhost is a vailable
[WARNING]: provided hosts list is empty, only localhost is a vailable. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Schedule a task with custom time] ****************************************nchanged: [localhost]nnPLAY RECAP *********************************************************************nlocalhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn### 验证新的 Cron 作业nn要验证新的 cron 作业是否已创建,请检查系统上的 crontab:nn```bashncrontab -ln```nn你现在应该在输出中看到两个 cron 作业:nn```n#Ansible: my_cron_jobn*/5 * * * * /home/labex/project/script.shn#Ansible: custom_cron_jobn0 9 * * * /home/labex/project/script.shn```nn第一个作业是你在步骤 1 中创建的,每 5 分钟运行一次。第二个作业是你刚刚创建的新作业,每天上午 9:00 运行。nn### 其他 Cron 调度示例nn以下是一些其他的 cron 调度示例,帮助你更好地理解时间格式:nn- `0 * * * *` - 每小时开始时运行n- `0 0 * * *` - 每天午夜运行n- `0 0 1 * *` - 每月第一天午夜运行n- `0 0 * * 0` - 每周日午夜运行n- `0 12 * * 1-5` - 工作日(周一至周五)中午运行nn理解这些模式将帮助你使用 Ansible Cron 模块更有效地调度任务。nn恭喜!你已成功使用 Ansible Cron 模块安排了一个在特定时间运行的 cron 作业。n","need_verify":true,"has_solution":false},{"position":3,"title":"确保 Cron 作业以特定用户身份运行","layout":"doc-workbench-split","text":"## 确保 Cron 作业以特定用户身份运行nn在这一步中,你将学习如何指定 cron 作业应以哪个用户身份运行。这是系统管理和安全的一个重要方面,因为它允许你控制计划任务执行时的权限和环境。nn### 理解 Cron 作业的用户上下文nn在类 Unix 系统中,cron 作业继承拥有它们的用户的权限和环境。这意味着:nn1. 作业只能访问用户有权限访问的文件和资源。n2. 作业使用用户的环境变量和设置运行。n3. 作业创建的任何文件将归该用户所有。nn默认情况下,当你使用 Ansible Cron 模块而不指定用户时,cron 作业将为运行 Ansible playbook 的用户创建。但是,你可以使用 `user` 参数显式设置不同的用户。nn### 修改 Ansible Playbooknn让我们修改我们的 playbook,指定 cron 作业应以 `labex` 用户身份运行。在 WebIDE 中打开 `/home/labex/project/cron_module_playbook.yaml` 文件,并将其内容替换为以下内容:nn```yamln- hosts: localhostn tasks:n - name: Schedule a task with custom time for specific usern cron:n name: custom_cron_jobn minute: "0"n hour: "9"n job: /home/labex/project/script.shn user: labexn```nn这里关键的新增部分是:nn- `user: labex` - 此参数指定 cron 作业应为 `labex` 用户创建。nn即使在这个环境中我们已经以 `labex` 用户身份运行,但显式设置它是一个很好的做法,有助于提高 playbook 在其他环境中的清晰度和可移植性。nn### 运行修改后的 Playbooknn现在,运行修改后的 Ansible playbook 来更新 cron 作业。在终端中执行以下命令:nn```bashncd /home/labex/projectnansible-playbook cron_module_playbook.yamln```nn你应该会看到类似以下的输出:nn```n[WARNING]: No inventory was parsed, only implicit localhost is a vailablen[WARNING]: provided hosts list is empty, only localhost is a vailable. Note thatnthe implicit localhost does not match 'all'nnPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Schedule a task with custom time for specific user] **********************nok: [localhost]nnPLAY RECAP *********************************************************************nlocalhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn注意,输出显示的是 `ok` 而不是 `changed`。这是因为 cron 作业已经存在,唯一的更改是用户参数,而在这种情况下该参数已经是正确的(因为我们从一开始就以 `labex` 用户身份运行)。nn### 验证 Cron 作业nn要验证 cron 作业是否仍然配置正确,请检查 crontab:nn```bashncrontab -ln```nn你应该会看到类似以下的输出:nn```n#Ansible: my_cron_jobn*/5 * * * * /home/labex/project/script.shn#Ansible: custom_cron_jobn0 9 * * * /home/labex/project/script.shn```nn### 查看特定用户的 Cron 作业nn如果你想查看特定用户的 cron 作业,可以在 `crontab` 命令中使用 `-u` 选项:nn```bashnsudo crontab -u labex -ln```nn此命令将显示为 `labex` 用户安排的所有 cron 作业。在生产环境中,根据每个任务所需的访问级别和权限,你可能会有不同的 cron 作业以不同的用户身份运行。nn### 安全注意事项nn在为不同用户安排 cron 作业时,请考虑以下安全实践:nn1. 使用最小权限原则 - 仅为用户分配执行任务所需的权限来运行 cron 作业。n2. 除非绝对必要,否则避免以 `root` 用户身份安排任务。n3. 确保 cron 作业运行的脚本具有适当的权限和错误处理。n4. 考虑使用像 Ansible 这样的配置管理工具来在你的基础设施中保持一致的 cron 作业设置。nn恭喜!你已成功使用 Ansible Cron 模块将 cron 作业配置为以特定用户身份运行。这项技能将帮助你更安全、有效地管理系统任务。n","need_verify":true,"has_solution":false},{"position":4,"title":"移除 Cron 作业","layout":"doc-workbench-split","text":"## 移除 Cron 作业nn在这一步中,你将学习如何使用 Ansible Cron 模块删除不需要的 cron 作业。管理 cron 作业的完整生命周期是系统管理员和 DevOps 工程师的一项重要技能。nn### 为何要删除 Cron 作业nn你可能需要删除 cron 作业的原因有以下几点:nn1. 计划任务不再需要。n2. 你想用新的配置替换现有的作业。n3. 你需要清理系统以提高可维护性。n4. 任务需要暂时禁用。nnAnsible 让你能够以系统且可重复的方式在整个基础设施中轻松删除 cron 作业。nn### 理解 `state` 参数nnAnsible Cron 模块使用 `state` 参数来控制 cron 作业是应该存在还是不存在:nn- `state: present` - 这是默认值。它确保 cron 作业以指定的配置存在。n- `state: absent` - 这确保 cron 作业不存在,如果它之前已创建,则将其删除。nn### 修改 Ansible Playbooknn让我们修改我们的 playbook 来删除我们创建的第一个 cron 作业(名为 `my_cron_job`)。在 WebIDE 中打开 `/home/labex/project/cron_module_playbook.yaml` 文件,并将其内容替换为以下内容:nn```yamln- hosts: localhostn tasks:n - name: Remove the cron jobn cron:n name: my_cron_jobn state: absentn```nn此 playbook 的关键元素是:nn- `name: my_cron_job` - 这通过名称标识要删除的 cron 作业。n- `state: absent` - 这告诉 Ansible 确保该 cron 作业不存在。nn请注意,我们只需要指定 cron 作业的名称来标识它以便删除。其他参数(如分钟、小时、作业等)不需要指定。nn### 运行修改后的 Playbooknn现在,运行修改后的 Ansible playbook 来删除 cron 作业。在终端中执行以下命令:nn```bashncd /home/labex/projectnansible-playbook cron_module_playbook.yamln```nn你应该会看到类似以下的输出:nn```n[WARNING]: No inventory was parsed, only implicit localhost is a vailablen[WARNING]: provided hosts list is empty, only localhost is a vailable. Note thatnthe implicit localhost does not match 'all'nnPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Remove the cron job] *****************************************************nchanged: [localhost]nnPLAY RECAP *********************************************************************nlocalhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn`changed: [localhost]` 这一行表明 cron 作业已成功删除。nn### 验证 Cron 作业是否已删除nn要验证 cron 作业是否已被删除,请检查系统上的 crontab:nn```bashncrontab -ln```nn你现在应该在输出中只看到第二个 cron 作业:nn```n#Ansible: custom_cron_jobn0 9 * * * /home/labex/project/script.shn```nn如我们的 playbook 所要求的,`my_cron_job` 条目已被删除。nn### Ansible 的幂等性nnAnsible 的一个关键特性是幂等性——多次应用相同的操作与应用一次的结果相同。这对于像删除 cron 作业这样的任务特别有用。nn让我们再次运行 playbook 来演示这一点:nn```bashnansible-playbook cron_module_playbook.yamln```nn你应该会看到类似以下的输出:nn```n[WARNING]: No inventory was parsed, only implicit localhost is a vailablen[WARNING]: provided hosts list is empty, only localhost is a vailable. Note thatnthe implicit localhost does not match 'all'nnPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Remove the cron job] *****************************************************nok: [localhost]nnPLAY RECAP *********************************************************************nlocalhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn注意,第二次运行时,删除任务的输出显示的是 `ok` 而不是 `changed`。这是因为 cron 作业已经被删除,所以不需要进行任何更改。nn### 管理多个 Cron 作业nn在实际场景中,你可能需要在单个 playbook 中管理多个 cron 作业。你可以包含多个 cron 任务,每个任务都有自己的配置:nn```yamln- hosts: localhostn tasks:n - name: Remove first cron jobn cron:n name: job1n state: absentnn - name: Create second cron jobn cron:n name: job2n minute: "0"n hour: "12"n job: /path/to/script.shnn - name: Update third cron jobn cron:n name: job3n minute: "*/10"n job: /path/to/another/script.shn```nn这种方法允许你在单个、版本可控的 playbook 中管理所有 cron 作业的完整生命周期。nn恭喜!你已经成功学习了如何使用 Ansible Cron 模块删除 cron 作业。这完成了 cron 作业的基本生命周期管理:创建、修改和删除。n","need_verify":true,"has_solution":false},{"position":5,"title":"总结","layout":"doc-fullscreen","text":"## 总结nn恭喜你完成了 Ansible Cron 模块实验!在整个实验过程中,你已经获得了使用 Ansible 管理计划任务几个关键方面的实践经验:nn1. 创建按固定间隔运行的简单 cron 作业。n2. 使用自定义的 cron 时间表达式安排任务在特定时间运行。n3. 确保 cron 作业以特定用户身份运行,以实现适当的安全和权限管理。n4. 删除不再需要的 cron 作业。nn这些技能对于在任何 Linux 环境中自动化系统管理任务、维护操作和重复性流程至关重要。通过使用 Ansible 来管理你的 cron 作业,你将受益于:nn- 跨多个系统的一致配置。n- 作业调度的版本控制。n- 可重复应用的幂等操作。n- 计划任务的自动部署和管理。nn当你继续使用 Ansible 时,可以考虑探索 Cron 模块的更多高级功能,例如:nn- 为 cron 作业设置环境变量。n- 使用特殊的时间规范,如 `@daily` 或 `@reboot`。n- 将 cron 管理与其他 Ansible 模块结合使用,以实现全面的自动化解决方案。nn有效管理计划任务的能力是一项宝贵的技能,它将在系统管理、DevOps 和其他 IT 角色中对你大有帮助。n","need_verify":false,"has_solution":false}
本文转载于:https://labex.io/zh/tutorials/ansible-ansible-cron-module-290157 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。