Ansible 服务重启失败

Posted

技术标签:

【中文标题】Ansible 服务重启失败【英文标题】:Ansible Service Restart Failed 【发布时间】:2015-07-21 15:41:41 【问题描述】:

我在使用 Ansible 重新启动 SSH 守护程序时遇到了一些问题。

我正在使用截至 2015 年 5 月 11 日的最新软件(Ansible 1.9.1 / Vagrant 1.7.2 / VirtualBox 4.3.26 / 主机:OS X 10.10.1 / 访客:ubuntu/trusty64)

tl;dr:我调用服务语法的方式似乎有问题。

原始用例(处理程序)的问题

手册

- hosts: all
- remote_user: vagrant
- tasks:

  ...

  - name: Forbid SSH root login
    sudo: yes
    lineinfile: dest=/etc/ssh/sshd_config regexp="^PermitRootLogin" line="permitRootLogin no" state=present
    notify:
      - restart ssh

  ...

- handlers:
  - name: restart ssh
    sudo: yes
    service: name=ssh state=restarted

输出

NOTIFIED: [restart ssh] 

failed: [default] => "failed": true

FATAL: all hosts have already failed -- aborting

nginx 处理程序以几乎相同的语法成功完成。

任务也失败

手册

- name: Restart SSH server
  sudo: yes
  service: name=ssh state=restarted

与处理程序用例的输出相同。

临时命令也失败

壳牌

> ansible all -i ansible_inventory -u vagrant -k -m service -a "name=ssh state=restarted"

库存

127.0.0.1:8022

输出

127.0.0.1 | FAILED >> 
    "failed": true,
    "msg": ""

Shell 命令在框中工作

当我通过 SSH 登录并运行常规命令时,一切正常。

> vagrant ssh
> sudo service ssh restart
ssh stop/waiting
ssh start/running, process 7899
> echo $?
0

命令任务也有效

输出

TASK: [Restart SSH server] ****************************************************
changed: [default] => "changed": true, "cmd": ["service", "ssh", "restart"], "delta": "0:00:00.060220", "end": "2015-05-11 07:59:25.310183", "rc": 0, "start": "2015-05-11 07:59:25.249963", "stderr": "", "stdout": "ssh stop/waiting\nssh start/running, process 8553", "warnings": ["Consider using service module rather than running service"]

正如我们在警告中看到的那样,我们应该使用服务模块,但我仍然不确定障碍在哪里。

【问题讨论】:

同样的问题,同样的设置。最初的调查似乎表明使用“/etc/init.d/ssh restart”(SysV 风格)而不是“restart ssh”(新贵风格)调用了重新启动。在此github.com/ansible/ansible-modules-core/issues/1298 上打开了一个问题 这似乎是@leucos 所说的错误。也不相关,但permitRootLogin no 中似乎有一个错字。使用驼峰式。 似乎正在处理该错误github.com/ansible/ansible-modules-core/commit/… 我确认当前的开发 (2.0.0.14080.ded6e9b) 解决了问题。 【参考方案1】:

正如上面的 cmets 所述,这是一个 Ansible 问题,显然将在 2.0 版本中得到修复。

我刚刚更改了我的处理程序以使用 command 模块并继续前进:

- name: restart sshd
  command: service ssh restart

【讨论】:

我仍然遇到 ansible-1.9.4-1.fc23.noarch AFAICS 的错误 这里与 Ubuntu 14.04.1 中的 ansible 2.0.1.0 和 supervisord 3.0b2 相同 我在重新启动 php7.0-fpm 时遇到问题。从服务模块切换到command: service php7.0-fpm restart 为我解决了这个问题。 是的,仍然在 2.4.1.0 中发生 :-( 它甚至警告我:“ [警告]:考虑使用服务模块而不是运行服务”即使它不起作用 :- D 感谢您的帮助。 5年后,命令也可以是systemctl restart sshd

以上是关于Ansible 服务重启失败的主要内容,如果未能解决你的问题,请参考以下文章

jenkins中重启tomcat失败操作

如何使用 Ansible 重启 CentOS 7?

服务器重启,nginx重启失败

怎么查看linux重启ssh进程失败原因

电脑开机然后显示本地会话管理器服务登陆失败,rpc服务器不可用,然后一直重启

cKan 在重启 Apache 服务时安装失败