Ansible: 실행 중인 경우에만 서비스를 다시 시작합니다.

Ansible: 실행 중인 경우에만 서비스를 다시 시작합니다.

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'

관련 정보