如何使用host_vars确保存在多个特定的cron作业?

问题描述 投票:0回答:1

我想写一个ansible playbook(我对ansible很新 - 所以对我很好),检查用户crontab中是否存在各种cronjobs。作业应该只执行各种脚本。除脚本名称外,所有主机的作业都相同。 crontab中的一行如下所示:

30 5 * * * /path/to/script/monitoringScript_serviceX > /path/to/script/monitoringScript_serviceX.out 2>&1

根据我所在的主机,定义了不同的服务,从而产生不同的脚本名称。我在每个主机的一个文件中将服务定义为host_vars中的YAML列表(inventory / host_vars / host1 / services)

一个服务文件看起来像这样:

services:
    - service1
    - service2

某些主机只有一个已定义的服务。

我的剧本看起来像这样:

  - hosts: hostgroupX
    gather_facts: False
    tasks:
      - name: Ensure monitoring cron jobs are present
        cron:
            name: "check: monitoring data jobs"
            hour: "5"
            minute: "30"
            user: "user"
            job: "/path/to/script/monitoringScript_{{ item }} > /path/to/script/monitoringScript_{{ item }}.out 2>&1"
        loop: "{{ services }}"

如果我让播放在一个主机上运行,​​在该主机上只有一个服务在文件中定义,一切运行良好。

但是,如果定义了多个服务,则只会将列表中的最后一个服务写入crontab。上面的示例服务文件的结果如下所示:

#Ansible: check: monitoring data jobs 
30 5 * * * /path/to/script/monitoringScript_service2 > /path/to/script/monitoringScript_service2.out 2>&1

即使我希望它看起来像这样:

#Ansible: check: monitoring data jobs 
30 5 * * * /path/to/script/monitoringScript_service1 > /path/to/script/monitoringScript_service1.out 2>&1
30 5 * * * /path/to/script/monitoringScript_service2 > /path/to/script/monitoringScript_service2.out 2>&1

我很感激任何想法如何实现这一点,提前谢谢!

loops cron ansible
1个回答
1
投票

Ansible使用您的cron作业的名称作为唯一标识符;它会在添加新作业之前删除任何匹配的作业。这是为了防止每次运行时多次运行ansible附加重复的cron作业。

解决方案是在cron作业名称中包含服务名称,如下所示:

- name: Ensure monitoring cron jobs are present
  cron:
      name: "check: monitoring data for service {{ item }}"
      hour: "5"
      minute: "30"
      user: "user"
      job: "/path/to/script/monitoringScript_{{ item }} > /path/to/script/monitoringScript_{{ item }}.out 2>&1"
  loop: "{{ services }}"

这会让你的cron条目看起来像:

#Ansible: check: monitoring data for service service1
30 5 * * * /path/to/script/monitoringScript_service1 ...
#Ansible: check: monitoring data for service service2
30 5 * * * /path/to/script/monitoringScript_service2 ...
#Ansible: check: monitoring data for service service3
30 5 * * * /path/to/script/monitoringScript_service3 ...
© www.soinside.com 2019 - 2024. All rights reserved.