需要使用Ansible剧本检查多个系统上的Single Service状态,有没有办法使用服务模块而不是Shell模块?
答案 0 :(得分:0)
使用service
模块(以及相关的更具体的模块,例如systemd
),您可以确保服务处于所需状态。
例如,以下任务将使apache在启动时(如果尚未配置)启动;在apache停止时启动;如果进行了更改,则报告更改;如果不需要更改,则报告正常。
- name: Enable and start apache
service:
name: apache
enabled: yes
state: started
这些模块不支持仅检查服务状态而不进行任何更改。您将必须使用命令行并分析输出/返回状态。
systemd示例
- name: Check status of my service
command: systemctl -q is-active my_service
check_mode: no
failed_when: false
changed_when: false
register: my_service_status
- name: Report status of my service
debug:
msg: "my_service is {{ (my_service_status.rc == 0) | ternary('Up', 'Down') }}"
请注意:
check_mode: no
使任务是否继续运行,您可以在ansible_playbook命令行上使用'--check'。否则,在检查模式下,下一个任务将失败,并带有一个未定义的变量。failed_when: false
限制了当返回码不同于0(未启动服务)时任务失败。您可以通过列出正常情况下所有可能的返回码,而在得到另一个返回码(例如failed_when: not (my_service_status in [0, 3, X])
)时失败,来更具体地说明changed_when: false
使任务始终报告正常,默认情况下,对于命令和shell模块,changed
除外。