Ansible:我应该将服务启动设置为服务启用的处理程序吗?

问题描述 投票:1回答:1

假设我需要启用服务然后启动服务(例如某个Web服务器),我应该创建一个任务来启用服务然后创建另一个任务来启动服务吗?或者我应该创建一个启用服务的任务,在此服务中创建一个通知,它会触发处理程序来启动服务?

如果使用notify-handler的策略,那么问题是服务是否成功启用但不知何故没有启动,然后再次运行playbook时。由于该服务已启用,因此将不再启动。

我认为将它们放在单独的任务中可能更好?一般来说,人们如何在Ansible中实现它们?

如果单独编写任务,这是我的代码:

  tasks:
  - name: enable airflow service
    systemd:
      name: airflow-worker.service
      enabled: yes
  - name: start airflow service 
    service:
      name: airflow-worker
      state: started
ansible
1个回答
3
投票

Systemd包装Centos6服务脚本,因此您仍然可以使用systemd操作它们。启动状态是幂等的,因此如果它已经启动,它将不会被标记为更改,您不必担心一遍又一遍地运行它。您可以启用并启动相同的任务。这是您应该使用的方法:

tasks:
  - name: Start and Enable Airflow
    systemd:
      name: airflow-worker
      state: started
      enabled: yes
      daemon-reload: yes

处理程序更适合于配置文件更改的情况。处理程序可以侦听它并在触发时重新启动服务。重新启动的状态永远不是幂等的,因此它只应在处理程序场景中使用。

© www.soinside.com 2019 - 2024. All rights reserved.