我如何让 ansible 报告守护进程是否在 Linux 上运行?

我如何让 ansible 报告守护进程是否在 Linux 上运行?

如何让 ansible 报告守护进程是否在 Linux 上运行?我并不想根据结果执行操作。我只想要一个运行 Apache 的服务器列表。我正在运行 RHEL 6 和 7。因此 RHEL 7 使用 systemd,而 RHEL 6 使用旧的 init 脚本。

答案1

Ansible服务事实模块可能是一个不错的选择。

据我所知,Apache 服务httpd在所有主要的 RHEL 版本中都有命名,因此您不必进行依赖于版本的操作,而 Ansible 模块会处理 systemd 和 upstart 的差异。

下面这个例子应该可以解决问题(注意,检查服务是否启用或实际运行是有区别的。服务当前未运行,因为它失败或被管理员停止,但应该运行,因为服务已启用或反之亦然)

- name: Check for apache status
   service_facts:
- debug:
    var: ansible_facts.services.httpd.state

答案2

最好使用一些监控工具。Ansible 是基于通过 ssh 在服务器端执行的操作的配置管理工具。这不是一个有效的想法。

如果这是唯一的选择,那么您可以使用 Ansible Tower -> 带有 Schedule(如 cron)-> 可与 Slack/电子邮件通知一起使用。

您可以使用命令:/etc/init.d/httpd status 和 register 检查 stdout 输出,如果符合条件,则可以触发警报。例如:

- name: check http
  command: /etc/init.d/httpd status
  register: httpd_status
  failed_when: "'NOT' in httpd_status.stdout"
  changed_when: False
改变不是以及检查状态时看到的任何其他输出。

答案3

答案的使用service_facts非常有趣,但您也可以通过实现一些可以返回定制值的“custom_facts”来解决这个问题。

自定义事实是在收集事实时执行并返回 JSON 对象的脚本。

相关内容