Ansible:安装包后无法启动httpd服务
Ansible: Unable to start the httpd service after installing its package
我正在测试剧本
以下 playbook 可以安装 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
我创建的第二个剧本可能有什么问题?
启动服务的处理程序 Start HTTPD
没有 运行 因为任务 verify that the web service is running
失败。
On each host, Handlers are run only once after all the tasks in a play
are complete.
在您的剧本中,有三个任务。尽管第一个任务 Install the apache web server
通知了处理程序,但只有在完成该游戏中的所有三个任务后,ansible 运行 才会通知处理程序。
When a task fails on a host, handlers which were previously notified
will not be run on that host.
并且第二个任务的失败停止了该主机上 运行ning 的处理程序,因此服务没有启动。
如果你想运行处理程序而不考虑任务失败,你可以在你的游戏中设置force_handlers: True
。
阅读更多:Handlers, Handler Failures
我正在测试剧本
以下 playbook 可以安装 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
我创建的第二个剧本可能有什么问题?
启动服务的处理程序 Start HTTPD
没有 运行 因为任务 verify that the web service is running
失败。
On each host, Handlers are run only once after all the tasks in a play are complete.
在您的剧本中,有三个任务。尽管第一个任务 Install the apache web server
通知了处理程序,但只有在完成该游戏中的所有三个任务后,ansible 运行 才会通知处理程序。
When a task fails on a host, handlers which were previously notified will not be run on that host.
并且第二个任务的失败停止了该主机上 运行ning 的处理程序,因此服务没有启动。
如果你想运行处理程序而不考虑任务失败,你可以在你的游戏中设置force_handlers: True
。
阅读更多:Handlers, Handler Failures