我写的一些任务开始并永不结束。 Ansible 不提供任何错误或日志来解释这一点,即使使用 -vvvv 选项也是如此。剧本只是挂起,过去的时间不会改变任何东西。
当我尝试手动运行我的任务(通过 SSH 输入命令)时,一切都很好。
挂起的示例任务:
- name: apt upgrade
shell: apt-get upgrade
有什么办法可以看到 stdout 和 stderr 吗?我试过了:
- name: apt upgrade
shell: apt-get upgrade
register: hello
- debug: msg="{{ hello.stdout }}"
- debug: msg="{{ hello.stderr }}"
但什么都没有改变。
我确实有必需的权限,并且我传递了正确的 sudo 密码 - 其他需要 sudo 正确执行的任务。
最佳答案
问题的最可能原因是 SSH 连接。当一个任务需要很长的执行时间时 SSH 超时。我曾经遇到过这样的问题,为了克服 SSH 超时的问题,在运行 Ansible 的当前目录中创建一个 ansible.cfg 添加以下内容:
[ssh_connection]
ssh_args = -o ServerAliveInterval=n
其中
n
是我们通过 SSH 连接到服务器时使用的 ServerAliveInterval(秒)。将其设置在 1-255 之间。这将导致 ssh 客户端每 n
秒向服务器发送一次空包以避免连接超时。关于ubuntu - 如何检测 Ansible playbook 在执行过程中挂起的原因,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20798774/