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

use*_*955 1 ansible

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

如果使用通知处理程序的策略,那么问题是,如果该服务被成功启用,但不知何故没有启动,再后来,当我再次运行剧本上。由于该服务已启用,因此将不再启动。

我认为将它们放在单独的任务中也许更好?通常,人们如何在Ansible中实现它们?

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

  tasks:
  - name: enable airflow service
    systemd:
      name: airflow-worker.service
      enabled: yes
  - name: start airflow service 
    service:
      name: airflow-worker
      state: started
Run Code Online (Sandbox Code Playgroud)

And*_*w H 5

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

tasks:
  - name: Start and Enable Airflow
    systemd:
      name: airflow-worker
      state: started
      enabled: yes
      daemon-reload: yes
Run Code Online (Sandbox Code Playgroud)

处理程序将更适合更改配置文件的方案。处理程序可以侦听该事件,并在触发该服务后重新启动该服务。重新启动状态永远不是幂等的,因此仅应在处理程序方案中使用。