删除 Cron 作业
在这一步中,你将学习如何使用 Ansible Cron 模块删除不需要的 cron 作业。管理 cron 作业的完整生命周期是系统管理员和 DevOps 工程师的一项重要技能。
为何要删除 Cron 作业
你可能需要删除 cron 作业的原因有以下几点:
- 计划任务不再需要。
- 你想用新的配置替换现有的作业。
- 你需要清理系统以提高可维护性。
- 任务需要暂时禁用。
Ansible 让你能够以系统且可重复的方式在整个基础设施中轻松删除 cron 作业。
理解 state
参数
Ansible Cron 模块使用 state
参数来控制 cron 作业是应该存在还是不存在:
state: present
- 这是默认值。它确保 cron 作业以指定的配置存在。
state: absent
- 这确保 cron 作业不存在,如果它之前已创建,则将其删除。
修改 Ansible Playbook
让我们修改我们的 playbook 来删除我们创建的第一个 cron 作业(名为 my_cron_job
)。在 WebIDE 中打开 /home/labex/project/cron_module_playbook.yaml
文件,并将其内容替换为以下内容:
- hosts: localhost
tasks:
- name: Remove the cron job
cron:
name: my_cron_job
state: absent
此 playbook 的关键元素是:
name: my_cron_job
- 这通过名称标识要删除的 cron 作业。
state: absent
- 这告诉 Ansible 确保该 cron 作业不存在。
请注意,我们只需要指定 cron 作业的名称来标识它以便删除。其他参数(如分钟、小时、作业等)不需要指定。
运行修改后的 Playbook
现在,运行修改后的 Ansible playbook 来删除 cron 作业。在终端中执行以下命令:
cd /home/labex/project
ansible-playbook cron_module_playbook.yaml
你应该会看到类似以下的输出:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Remove the cron job] *****************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
changed: [localhost]
这一行表明 cron 作业已成功删除。
验证 Cron 作业是否已删除
要验证 cron 作业是否已被删除,请检查系统上的 crontab:
crontab -l
你现在应该在输出中只看到第二个 cron 作业:
#Ansible: custom_cron_job
0 9 * * * /home/labex/project/script.sh
如我们的 playbook 所要求的,my_cron_job
条目已被删除。
Ansible 的幂等性
Ansible 的一个关键特性是幂等性——多次应用相同的操作与应用一次的结果相同。这对于像删除 cron 作业这样的任务特别有用。
让我们再次运行 playbook 来演示这一点:
ansible-playbook cron_module_playbook.yaml
你应该会看到类似以下的输出:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Remove the cron job] *****************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
注意,第二次运行时,删除任务的输出显示的是 ok
而不是 changed
。这是因为 cron 作业已经被删除,所以不需要进行任何更改。
管理多个 Cron 作业
在实际场景中,你可能需要在单个 playbook 中管理多个 cron 作业。你可以包含多个 cron 任务,每个任务都有自己的配置:
- hosts: localhost
tasks:
- name: Remove first cron job
cron:
name: job1
state: absent
- name: Create second cron job
cron:
name: job2
minute: "0"
hour: "12"
job: /path/to/script.sh
- name: Update third cron job
cron:
name: job3
minute: "*/10"
job: /path/to/another/script.sh
这种方法允许你在单个、版本可控的 playbook 中管理所有 cron 作业的完整生命周期。
恭喜!你已经成功学习了如何使用 Ansible Cron 模块删除 cron 作业。这完成了 cron 作业的基本生命周期管理:创建、修改和删除。