![Ansible: 실행 중인 경우에만 서비스를 다시 시작합니다.](https://rvso.com/image/652678/Ansible%3A%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%EA%B2%BD%EC%9A%B0%EC%97%90%EB%A7%8C%20%EC%84%9C%EB%B9%84%EC%8A%A4%EB%A5%BC%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Ansible 플레이북에서 구성 파일을 업데이트한 후 서비스를 다시 시작하고 싶지만,이미 실행 중.
Ansible을 사용하여 서비스 상태를 제어하고 싶지 않습니다. 이전에 시작된 경우에만 서비스를 다시 시작하세요.
이를 위해 사용자 정의 명령을 사용할 수 있지만 ansible의 서비스 모듈처럼 다른 서비스 관리 시스템(upstart/systemd/sysvinit/openrc...) 간에 이식 가능하지는 않습니다.
어떤 조언이라도 감사드립니다.
답변1
구성이 업데이트되면 변수를 등록합니다. 서비스가 실행 중인지 확인할 때 다른 변수를 등록하세요. 두 변수가 모두 true인 경우에만 서비스 다시 시작 처리기를 호출하세요.
다양한 OS의 세부 사항에 대해서는 호스트 사실의 제품군/배포를 기반으로 조건부 실행을 할 수 있습니다.
답변2
Ansible service:
모듈은 서비스가 이미 실행 중인지 확인하는 메커니즘을 제공하지 않습니다. 따라서 shell:
먼저 서비스가 실행 중인지 확인하려면 모듈을 통해 이와 같은 것을 사용해야 합니다 .
예
여기에서는 WebSphere 또는 Tomcat8이 실행 중인지 감지한 다음 해당 상태에 따라 적절한 서비스를 다시 시작합니다.
---
# handles tomcat8
- name: is tomcat8 already running?
shell: service tomcat8 status warn=false
register: _svc_tomcat8
failed_when: _svc_tomcat8.rc != 0 and ("unrecognized service" not in _svc_tomcat8.stderr)
ignore_errors: true
- name: restart tomcat8 if running
service: name=tomcat8 state=restarted
when: "_svc_tomcat8.rc == 0"
# handles WAS
- name: is WebSphere already running?
shell: service Node01_was.init status warn=false
register: _svc_websphere
failed_when: _svc_websphere.rc != 0 and ("unrecognized service" not in _svc_websphere.stderr)
ignore_errors: true
- name: restart WebSphere if running
service: name=Node01_was.init state=restarted
when: "_svc_websphere.rc == 0"
# vim:ft=ansible:
특정 파일이 업데이트된 경우에만 다시 시작을 호출하려면 또는 작업 register:
에서 를 사용하여 파일이 업데이트되었는지 여부의 상태를 저장할 수 있습니다. 그러면 그 결과가 작업 의 일부로 통합될 수 있습니다 .copy:
template:
register:
when:
service: name=XXXX state=restarted
답변3
이제 내장 service_facts
모듈을 사용하여 서비스 상태를 먼저 확인할 수 있습니다. 그런 다음 서비스 상태에 따라 조건을 추가할 수 있습니다.
다음은 다른 작업에서 알림을 받도록 설정된 예입니다.
- name: check service status
service_facts:
listen:
- restart sidekiq
- name: restart sidekiq
service:
name: sidekiq
state: restarted
become: yes
when: ansible_facts.services['sidekiq.service']['state'] == 'running'