Ansible 使用 playbook 重启 Linux 机器或服务器
您可以重启基于 Linux 或 Unix 的机器,等待它停机(例如内核更新),然后重新启动并响应命令。内核更新后,您可以使用命令或 shell 模块重启 Linux 服务器。但是,现在我们有一个重启模块,可以使用 Ansible 重启机器。
我使用以下方法测试了这个模块:
- Ubuntu Linux 16.04 / 18.04 / 20.04 LTS
- CentOS Linux 7/8
- Debian Linux 9.x/10.x/11.x
- RHEL 7.x/8.x
- OpenSUSE 和 SUSE 12.x/15.x
- FreeBSD
- OpenBSD
先决条件
请注意,您必须拥有Ansible 2.7 或更高版本才能使用重启模块:如果不使用 Ansible 2.7 版本,请尝试根据您的 Linux 发行版
$ ansible --version
使用 dnf 命令/ yum 命令/ apt 命令/ apt-get 命令进行更新:
$ sudo apt update ## Debian or Ubuntu box ##
$ sudo yum update ## RHEL/CentOS 7 ##
Ansible 使用 playbook 重启 Linux 机器或服务器
重启的语法非常简单:
- name: Reboot the machine with all defaults using Ansible reboot:
以下是使用cat 命令显示的示例 hosts 文件:
[all:vars] k_ver="linux-image-4.15.0-36-generic" ansible_user='{{ my_c_user }}' ansible_become=yes ansible_become_method=sudo ansible_become_pass='{{ my_c_sudo_pass }}' [legacy] do-de.public [cluster] ln.cbz01 ln.cbz02 ln.cbz04 ln.forum [lxd] ln.cbz01 ln.cbz02 ln.cbz04 do-de.public [vpn:vars] ansible_python_interpreter='/usr/bin/env python3' [vpn] do-blr-vpn [backup] gcvm.backup [nodes:children] vpn backup cluster legacy [isrestart:children] backup cluster vpn
这是我的reboot.yml:
--- - hosts: isrestart become: true become_user: root tasks: - name: Rebooting the cloud server/bare metal box reboot:
如何使用 Ansible 重启模块剧本来重启盒子
现在您要做的就是运行 playbook(请参阅如何为 Ansible Vault 设置和使用 sudo 密码)
$ ansible-playbook -i hosts --ask-vault-pass --extra-vars '@cluster.data.yml' reboot.yml
如何重新启动机器并设置超时值
默认情况下,Ansible 重启模块等待 600 秒。您可以使用以下语法增加值:
- name: Reboot a Linux machine reboot: reboot_timeout: 1800
如何设置命令在重新启动的主机上运行并期望成功以确定机器已准备好执行进一步的任务
ansbile 默认使用 whoami 命令。你可以按如下方式更改它:
- name: Reboot a Linux machine reboot: test_command: uptime
或者
- name: Reboot a Linux machine reboot: test_command: ping -c 4 192.168.2.254
如何设置重启前和重启后延迟
可以强制 Ansible 在重启成功后等待并在几秒钟内重新建立连接,如下所示:
- name: Unconditionally reboot the machine with all defaults reboot: post_reboot_delay: 180
如果您希望等待额外的网络/存储或服务器 VPN 启动(尽管您的连接已经正常工作),上述方法非常有用。您还可以设置在请求重启之前等待关机的时间:
- name: Unconditionally reboot the machine with all defaults reboot: pre_reboot_delay: 180
查看 Linux 服务器上的重启日志历史记录
假设我正在有条件地重启我的 Ubuntu 或 Debian Linux 机器。例如,我的 Ansible playbook:
- name: Check if a reboot is needed on AWS EC2 Ubuntu/Debian based servers register: reboot_required_file stat: path=/var/run/reboot-required get_md5=no - name: Reboot the box if kernel updated/installed on EC2 reboot: msg: "Reboot initiated by Ansible for kernel updates" connect_timeout: 5 reboot_timeout: 300 pre_reboot_delay: 0 post_reboot_delay: 30 test_command: uptime when: reboot_required_file.stat.exists
我们可以使用grep 命令/zgrep 命令在我们的服务器上搜索“由 Ansible 发起的用于内核更新的重启”,以查看我的机器何时重启:
示例输出:
$ ssh vivek@server1.example.com
$ sudo grep 'reboot' /var/log/auth.log
$ sudo zgrep 'Reboot initiated by Ansible for kernel updates' /var/log/auth.log*
$ sudo zgrep 'reboot' /var/log/auth.log*
auth.log:Jun 9 11:06:57 ls-debian-10 systemd-logind[488]: System is rebooting (Reboot initiated by Ansible for kernel updates). auth.log.2.gz:May 27 04:55:54 ip-172-26-14-129 sudo: admin : TTY=pts/0 ; PWD=/home/admin ; USER=root ; COMMAND=/sbin/reboot
另一个选择是运行最后一条命令:
$ sudo last -x "reboot"
重启历史记录:
reboot system boot 4.19.0-9-amd64 Wed Jun 10 03:51 still running reboot system boot 4.19.0-9-amd64 Tue Jun 9 11:07 - 03:51 (16:43) reboot system boot 4.19.0-9-amd64 Wed May 27 04:56 - 11:06 (13+06:10) reboot system boot 4.9.0-12-amd64 Wed May 27 04:15 - 04:55 (00:40) reboot system boot 4.9.0-8-amd64 Wed May 27 04:09 - 04:14 (00:05) reboot system boot 4.9.0-8-amd64 Wed May 27 04:08 - 04:09 (00:01) wtmp begins Wed May 27 04:08:01 2020
有关详细信息,请参阅“如何查找 Linux 系统上次重启时间和日期命令”
结论
您刚刚学习了如何在 Ansible playbook 中重启 Linux/Unix 机器并等待重启完成。有关更多信息,请参阅Ansible 文档。
- Ansible 重启 Debian/Ubuntu Linux 以进行内核更新并等待
- Ansible 使用 playbook 重启 Linux 机器或服务器
- 使用 Ansbile 剧本重启 Alpine Linux
- 使用 Ansbile laybooks 重启 SUSE/OpenSUSE Linux