【问题标题】:Ansible: should I set service start as handler of service enable?Ansible:我应该将服务启动设置为服务启用的处理程序吗?
【发布时间】:2018-01-03 15:27:06
【问题描述】:

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

【问题讨论】:

  • 为什么不把你的服务作为系统服务,然后你可以使用内置的服务模块来管理你的服务呢?
  • matiit:将服务作为系统服务是什么意思?我使用 systemd 启用该服务。
  • 如果您需要同时启用您的服务,请同时使用。使用state: startedenabled:yes。进一步检查documentation
  • Kyslik:你的意思是分别创建两个任务,而不是使用一个任务通知处理程序?

标签: ansible


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-08
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多