首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的不可接受的处理程序不开火?

为什么我的不可接受的处理程序不开火?
EN

Stack Overflow用户
提问于 2016-08-08 19:09:18
回答 3查看 9.9K关注 0票数 3

我有一个游戏手册,安装tomcat,然后部署一些web应用程序。web应用程序部署任务通知处理程序重新启动tomcat。但处理人员从不开火。我使用一个处理程序来管理tomcat服务,因为我从文档中了解到,即使多次调用,处理程序也只能触发一次。我漏掉了什么明显的东西吗?

,这是剧本:

代码语言:javascript
复制
---
- hosts: all
  become: true
  become_user: root
  roles:
  - role: common
  - role: nginx
  - role: tomcat
  - role: launchpad
  - role: manager
  - role: reporting
  handlers:
  - include: /tomcat/handlers/etitomcat_service_ctrl.yml

这是部署web应用程序的角色之一:

代码语言:javascript
复制
---
- name: Remove the current installation of LaunchPad
  file: path={{etitomcat_path}}/webapps/{{launchpad_module}} state=absent

- name: Remove the current war file for {{launchpad_module}}
  file: path={{etitomcat_path}}/webapps/{{launchpad_module}}.war state=absent     

- name: Download the latest snapshot of LaunchPad and deploy it to {{etitomcat_path}}
  get_url: url={{launchpad_source_url}} dest={{etitomcat_path}}/webapps/{{launchpad_module}}.war mode=0744 owner={{etitomcat_user}} group={{etitomcat_group}} force=yes
  notify: "restart_eti_tomcat"

,这是处理程序:

代码语言:javascript
复制
  - name: "Restart ETI Tomcat"
    service: name=etitomcat state=restarted
    become: true
    become_user: root
    listen: "restart_eti_tomcat"

  - name: "Start ETI Tomcat"
    service: name=etitomcat state=started
    become: true
    become_user: root
    listen: "start_eti_tomcat"

  - name: "Stop ETI Tomcat"
    service: name=etitomcat state=stopped
    become: true
    become_user: root
    listen: "stop_eti_tomcat" 
EN

回答 3

Stack Overflow用户

发布于 2016-08-08 22:02:24

在使用static: yes时,添加Ansible >= 2.1应该解决这个问题。

代码语言:javascript
复制
handlers:
- include: /tomcat/handlers/etitomcat_service_ctrl.yml
  static: yes

看看这个Github问题,链接的google组线程也可能包含有价值的信息。

编辑

正如“节奏魔鬼”指出的那样,文档注意到:

不能通知在包含中定义的处理程序。从Ansible 2.1开始,这是可行的,但是包含必须是静态的。

票数 7
EN

Stack Overflow用户

发布于 2017-01-27 06:49:06

这可能不是重点,但我会添加这一点,因为问题标题是相当广泛的,这是我发现的问题时,谷歌和下面是解决我的特定问题。

当在相应的任务中注册了更改时,一定要考虑到处理程序只会触发。即使您以最高的详细级别运行游戏,也会有,没有这样的条目,这说明了这一点。

代码语言:javascript
复制
RUNNING HANDLER [base : somehandler ] *********************** 
Unchanged:  Skipping

当它们在更改后被触发时,将是在所有的任务都已经执行之后。

这确实让我感到困惑,因为任务通知了您,不管它们是否真的做了一些事情,而处理程序则保持沉默。

例如,如果您有一个任务A,您已经运行了几次,直到它按照您的预期工作为止。

然后,连接处理程序B以重新启动服务之后,除非您擦除任务A正在执行或更改的操作,否则不会发生任何事情。

只要任务A注册没有更改,它就不会触发处理程序B

无论如何,这就是ansible 2.2.1的行为。

票数 4
EN

Stack Overflow用户

发布于 2016-08-09 06:49:21

您可以添加任务和post_tasks部分,而不是handlers部分,希望它对您有用:

代码语言:javascript
复制
---
- hosts: all
  become: true
  become_user: root
  tasks:
  - role: common
  - role: nginx
  - role: tomcat
  - role: launchpad
  - role: manager
  - role: reporting
  post_tasks:
  - include: /tomcat/handlers/etitomcat_service_ctrl.yml
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38836801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档