在服务失败时重新启动的可用脚本



希望有人能帮忙。我只是在Ansible的世界里找到我的脚,并试图创建一个脚本来检查一个服务是否正在运行,如果它没有启动,那么就启动它。这是我目前得到的。我不确定是否正确。

---
- hosts: all
tasks:
- name: Domain controller checks
block:
- name: Check Active Directory Domain Services are running
become_method: runas
win_service:
name: "{{ item }}"
start_mode: auto
state: started  
loop:
- NTDS
- ADWS
- Dfs
- DFSR
- DNS
- Kdc
tasks:         
- name: Restart failed services if needed
failure_actions:
- type: restart
delay_ms: 5000

通过rundeck运行这个脚本时,我得到以下错误:

[WARNING]: While constructing a mapping from<br />
<br />/etc/ansible/scripts/Service_ChecksV2.yml, line 2, column 5, found a duplicate
dict key (tasks). Using last defined value only.<br />
<br />ERROR! unexpected parameter type in action: <class 'ansible.parsing.yaml.objects.AnsibleSequence'><br />
<br />The error appears to be in '/etc/ansible/scripts/Service_ChecksV2.yml': line 20, column 13, but may
be elsewhere in the file depending on the exact syntax problem.<br />
<br />The offending line appears to be:
<br />tasks:
- name: Restart failed services if needed
^ here
Failed: AnsibleNonZero: ERROR: Ansible execution returned with non zero code.<br />

您可以使用ansible_facts模块来检查正在运行的服务。

实现方法如下:

# load service facts
- name: Prepare service facts
service_facts:

然后,您可以使用when变量运行任务以重新启动服务。

when: ansible_facts.services["Dfs.service"]["state"] != "running"

脚本失败是由于额外tasks部分剧本。

并且根据您的要求,在第一部分state: started就足够了。因为它将查找服务状态,如果发现服务正在运行,那么它将不做任何事情。否则,如果它发现服务没有运行,那么它将启动服务。

最新更新