简单 apache2 任务上的 ansible-playbook 出错

Error on ansible-playbook on simple apache2 task

尝试使用小型编排来处理 ansible,但很快 运行 就一个简单的 apache 问题提出了问题。在启用 mod_proxy 后重新启动时,失败并显示:

~$ ansible-playbook ansible/playbooks/apache_tomcat_mysql_mongo_stack.yml -u ansible --private-key ~/ansible/ansible.pem
PLAY [web] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.56.103]

TASK: [apache | Update apt cache]  ********************************************* 
ok: [192.168.56.103]

TASK: [apache | Install Apache2] ********************************************** 
ok: [192.168.56.103]

TASK: [apache | Creating a Document virtualhost file] ************************* 
skipping: [192.168.56.103]

TASK: [apache | Creating a Reverse Proxy virtualhost file] ******************** 
ok: [192.168.56.103]

TASK: [apache | Activate Mod Proxy] ******************************************* 
changed: [192.168.56.103]

NOTIFIED: [apache | Restart-Apache] ******************************************* 
failed: [192.168.56.103] => {"failed": true}
msg: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
(98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs

FATAL: all hosts have already failed -- aborting

NOTIFIED: [apache | Restart-Apache] ******************************************* 
FATAL: no hosts matched or all hosts have already failed -- aborting


FATAL: all hosts have already failed -- aborting

NOTIFIED: [apache | Restart-Apache] ******************************************* 
FATAL: no hosts matched or all hosts have already failed -- aborting

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
       to retry, use: --limit @/home/user/apache_tomcat_mysql_mongo_stack.retry

192.168.56.103             : ok=5    changed=1    unreachable=0    failed=1  

下面是剧本apache_tomcat_mysql_mongo_stack.yml

- hosts: web
  roles:
  - apache
  sudo: True
  vars:
    document_vhost: False
    proxy_vhost: True
    activate_vhost: False
    deactivate_vhost: False
    apache_domain_name: node3.localhost
    apache_admin_email_address: devops@node3.localhost
    apache_port: 80
    activate_vhost: True
    apache_vhosts:
    - apache_proxy_context: /
      reversed_server_mod: ajp
      reversed_server_ip: 192.168.56.105
      reversed_server_port: 8009
      reversed_server_context: /
- hosts: tomcat
  roles:
  - java
  - tomcat
  sudo: True
  vars:
    java_version: 7
    tomcat_version: 7
    tomcat_port: 8080
    tomcat_redirection_port: 8443
    tomcat_ajp_port: 8009
    tomcat_ajp_redirection_port: 8443
    tomcat_ajp_server_fake_name: Server
    tomcat_jvmroute_name: jvmroute1

为了简洁起见,所有相关信息(如 apache 角色和处理程序)都可以在 pastie.org 上找到。我无法真正弄清楚发生了什么,因为它看起来像 ansible 正试图在已经 运行ning 之外启动一个不同的 apache 服务。

如何解决此类问题?谢谢

我发现有两件事你可以进一步调查:

msg: (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80 (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down

这看起来 apache 无法绑定 TCP 端口 80,因为其他东西正在使用它。 运行 sudo netstat -ntlp | grep 80 在 运行 剧本之前,并准确验证哪个进程正在侦听端口 80。确保它是 apache。

AH00015: Unable to open logs

看起来 apache 写入其日志文件的文件系统权限可能是错误的。您还应该验证 /var/log/apache2(或您的发行版的任何路径)的相关目录权限。