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

时间:2018-01-03 15:27:06

标签: ansible

假设我需要启用服务然后启动服务(例如某个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

1 个答案:

答案 0 :(得分:3)

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

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

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