![我如何让 ansible 报告守护进程是否在 Linux 上运行?](https://linux22.com/image/744441/%E6%88%91%E5%A6%82%E4%BD%95%E8%AE%A9%20ansible%20%E6%8A%A5%E5%91%8A%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E5%9C%A8%20Linux%20%E4%B8%8A%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
如何让 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 对象的脚本。