可以在多个主机上重新启动 apache,但从不同的路径



尝试设置 Ansible 以在多个主机上重新启动 apache。但是在一组 50 台主机中,我在/app/instances/sites/startapache 中使用了 apache 启动脚本.sh但在其他 50 台主机中,我有/app/instances/startweb.sh。是否可以触发任何 apache 配置,无论路径如何,它都会重新启动 apache?

很好地使用库存,结合自定义变量,可以做到这一点。 因此,一个选项是有 2 个不同的组,并且为每个组声明了一个变量,其中包含启动脚本的完整路径。这样做是微不足道的,您将拥有所有必要的元素 https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

例如,下面是一个清单:

[group_startapache:children]
host_1
host_2
...
[group_startweb:children]
host_a
host_b
...
[group_startapache:vars]
apache_path=/app/instances/sites/startapache.sh
[group_startweb:vars]
apache_path=/app/instances/startweb.sh

因此,在您的剧本中,您将在任何 shell 或命令任务中引用{{ apache_path }}

但是如果可能的话,你应该创建一个具有此值的init.d/systemd(取决于你的系统(服务,允许你只进行"apache启动"。

另一种方法是使用 stat 来了解存在哪个脚本,但如果同时具有这两个脚本的主机,可能会导致问题。

如果您正在寻找一种快速简单的解决方案,我建议您使用first_found查找或with_first_found循环。例如:

- name: Start apache using first found script
command: "{{ item }}"
with_first_found:
- /app/instances/sites/startapache.sh
- /app/instances/startweb.sh

此方法不需要任何清单更改或其他代码增强功能。

这里只是一个小小的旁注。我也支持使用标准 systemd 配置的想法。除了简化您的代码之外,它还将 systemd 的全部功能(假设您使用的是 2015 年之后发布的一些主要 Linux 版本(带入了您的服务管理中。

相关内容

最新更新