Ansible:安装其软件包后无法启动httpd服务

时间:2020-04-14 18:06:20

标签: ansible ansible-template

我正在测试剧本

以下剧本可以安装apache并启动服务:

- hosts: apacheweb
  user: ansibleuser
  become: yes
  gather_facts: no
  tasks:
  - name: Install the apache web server
    yum: pkg=httpd state=latest
    notify: Start HTTPD
  handlers:
  - name: Start HTTPD
    systemd: name=httpd state=started enabled=yes

但不是以下一个,因为它确实安装了httpd软件包,但没有启动该服务并启用它。

- hosts: apacheweb
  user: ansibleuser
  become: yes
  gather_facts: no
  tasks:
  - name: Install the apache web server
    yum: pkg=httpd state=latest
    notify: Start HTTPD
  - name: verify that the web service is running
    command: systemctl status httpd
    register: result
  - debug: var=result
  handlers:
  - name: Start HTTPD
    systemd: name=httpd state=started enabled=yes

错误输出:

PLAY [apacheweb] ******************************************************************************************************************

TASK [Install the apache web server] **********************************************************************************************
changed: [host.learn.com]

TASK [verify that the web service is running] *************************************************************************************
fatal: [host.learn.com]: FAILED! => {"changed": true, "cmd": ["systemctl", "status", "httpd"], "delta": "0:00:00.032030", "end": "2020-04-14 17:59:18.295428", "msg": "non-zero return code", "rc": 3, "start": "2020-04-14 17:59:18.263398", "stderr": "", "stderr_lines": [], "stdout": "● httpd.service - The Apache HTTP Server\n   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)\n   Active: inactive (dead)\n     Docs: man:httpd(8)\n           man:apachectl(8)\n\nApr 14 14:50:31 host.learn.com systemd[1]: Starting The Apache HTTP Server...\nApr 14 14:50:31 host.learn.com systemd[1]: Started The Apache HTTP Server.\nApr 14 14:53:45 host.learn.com systemd[1]: Stopping The Apache HTTP Server...\nApr 14 14:53:46 host.learn.com systemd[1]: Stopped The Apache HTTP Server.\nApr 14 17:56:51 host.learn.com systemd[1]: Starting The Apache HTTP Server...\nApr 14 17:56:51 host.learn.com systemd[1]: Started The Apache HTTP Server.\nApr 14 17:57:32 host.learn.com systemd[1]: Stopping The Apache HTTP Server...\nApr 14 17:57:33 host.learn.com systemd[1]: Stopped The Apache HTTP Server.", "stdout_lines": ["● httpd.service - The Apache HTTP Server", "   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)", "   Active: inactive (dead)", "     Docs: man:httpd(8)", "           man:apachectl(8)", "", "Apr 14 14:50:31 host.learn.com systemd[1]: Starting The Apache HTTP Server...", "Apr 14 14:50:31 host.learn.com systemd[1]: Started The Apache HTTP Server.", "Apr 14 14:53:45 host.learn.com systemd[1]: Stopping The Apache HTTP Server...", "Apr 14 14:53:46 host.learn.com systemd[1]: Stopped The Apache HTTP Server.", "Apr 14 17:56:51 host.learn.com systemd[1]: Starting The Apache HTTP Server...", "Apr 14 17:56:51 host.learn.com systemd[1]: Started The Apache HTTP Server.", "Apr 14 17:57:32 host.learn.com systemd[1]: Stopping The Apache HTTP Server...", "Apr 14 17:57:33 host.learn.com systemd[1]: Stopped The Apache HTTP Server."]}

RUNNING HANDLER [Start HTTPD] *****************************************************************************************************

PLAY RECAP ************************************************************************************************************************
host.learn.com : ok=1    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

在我创建的第二本剧本中可能出了什么问题?

1 个答案:

答案 0 :(得分:1)

由于任务Start HTTPD失败,启动服务的处理程序verify that the web service is running未运行。

在每个主机上,处理程序在播放所有任务后仅运行一次 完成。

在您的剧本中,有三个任务。尽管处理程序已通过第一个任务Install the apache web server通知,但ansible仅在完成该播放中的所有三个任务后才运行处理程序。

当主机上的任务失败时,先前已通知的处理程序 将不会在该主机上运行。

第二个任务的失败使处理程序无法在该主机上运行,​​因此该服务未启动。

如果您希望不考虑任务失败而运行处理程序,则可以在游戏中设置force_handlers: True

了解更多:HandlersHandler Failures