我在使用 ansible playbook 执行 shell 脚本时遇到一个问题。
问题:由于 shell 脚本正在重新启动服务器,我失去了与远程服务器的连接。
我的 Ansible 剧本
- name: Handle reboot
hosts: all
become: yes
tasks:
- name: Execute the script
shell: bash testscript.sh
args:
chdir: /home/ubuntu
notify:
- Wait for server to restart
handlers:
- name: Wait for server to restart
local_action:
module: wait_for
host={{ inventory_hostname }}
port=22
delay=10
become: false
我的shell脚本:
#!/bin/bash
echo "Performing some tasks"
echo "rebooting now"
reboot
echo "reboot completed"
echo "Performing some more tasks"
远程服务器重启时出现的错误
fatal: [my-ip-address]: UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Shared connection to <my-ip-address> closed.",
"unreachable": true
}
是否可以处理由 shell 脚本完成的重启并等待连接直到远程服务器再次启动?
谢谢。
答案1
你应该使用wait_for_connection
反而。
tasks:
- name: Execute the script
shell: bash testscript.sh
args:
chdir: /home/ubuntu
- name: wait
wait_for_connection:
delay: 10
我建议在任务中执行此操作,而不是在处理程序中。处理程序仅在以下情况下执行:全部任务已经完成,因此如果您在执行重启的任务之后还有任务,那么这些任务将在剧本开始等待之前被尝试。
或者,使用重启模块,它会自动执行此操作。