使用Ansible重启Linux机器或者服务器

时间:2019-11-20 08:54:19  来源:igfitidea点击:

如何用Ansible重启多台Linux服务器?
我们可以使用命令或者shell模块重新启动Linux服务器。
不过,现在有一个reboot模块,可以用来重新启动计算机。

准备工作

我们必须具有Ansible 2.7或者更高版本才能使用reboot模块:

$ ansible --version

如果使用的不是Ansible版本2.7,
根据Linux发行版尝试使用dnf命令/yum命令/apt命令/apt-get命令对其进行更新:

$ sudo apt update ## Debian 或者 Ubuntu ##
 $ sudo yum update ## RHEL/CentOS 7 ##

使用Ansible playbooks重启Linux服务器

重启的语法非常简单:

- name: Reboot the machine with all defaults using Ansible
  reboot:

hosts文件示例:

[all:vars]
k_ver="linux-image-5.15.0-36-generic"
ansible_user='{{ my_c_user }}'
ansible_become=yes
ansible_become_method=sudo
ansible_become_pass='{{ kar_sudo_pass }}'
 
[server]
cent.oit01 
cent.oit02 
cent.oit03 
cent.forum 
 
[lxd]
vm.oit01
vm.oit02
vm.oit03

reboot.yml文件示例:

---
- hosts: isrestart
  become: true
  become_user: root
  tasks:
          - name: Rebooting the cloud server/bare metal box
            reboot:

如何使用Ansible reboot模块重启服务器

现在我们只需运行playbook

$ ansible-playbook -i hosts --ask-vault-pass --extra-vars '@cluster.data.yml' reboot.yml
- name: Reboot the machine with all defaults using Ansible
  reboot:

如何重启机器并设置超时时间

默认情况下,Ansible reboot模块等待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

我们还可以设置关机等待重新启动的时间:

- name: Unconditionally reboot the machine with all defaults
  reboot:
    pre_reboot_delay: 180

查看Linux服务器重启日志历史记录

假设我们正在重启我的Ubuntu或者debian服务器。

      - 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

通过 msg: "Reboot initiated by Ansible for kernel updates" ,
我们可以查看重启日志。

$ ssh [email protected]
 $ 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*

或者使用last查看最近重启的时间:

$ sudo last -x "reboot"