需要检查是否需要重新启动内核更新?

如果/vmlinuz内核未parsing为uname -r我正在使用Ansible来检查主机是否需要重新启动。

if条件虽然总是标识重新启动,即使testing机器已经重新启动并且内核正在parsing为相同的内核:

如果[$(readlink -f / vmlinuz)!= / boot / vmlinuz – $(uname -r)]; 然后回显“重启”; 否则回声'不'; 科幻

 - name: Check for reboot hint. shell: if [ $(readlink -f /vmlinuz) != /boot/vmlinuz-$(uname -r) ]; then echo 'reboot'; else echo 'no'; fi ignore_errors: true register: reboot_hint - name: Rebooting ... command: shutdown -r now "Ansible kernel update applied" async: 0 poll: 0 ignore_errors: true when: kernelup|changed or reboot_hint.stdout.find("reboot") != -1 register: rebooting - name: Wait for thing to reboot... pause: seconds=45 when: rebooting|changed 

您可以通过以下rpm查询可靠地确定最新安装的内核版本:

 rpm -q kernel --queryformat '%{installtime} %{version}-%{release}.%{arch}\n' | sort -n -k1 | tail -1 | cut -d ' ' -f 2 

RHEL 7上的示例输出:

 3.10.0-229.11.1.el7.x86_64 

现在只要检查uname -r的输出是否匹配:

 3.10.0-229.1.2.el7.x86_64 

在这个例子中,它不匹配,需要重启。

你可以使用testing来比较string:

 if [ "`rpm -q kernel --queryformat '%{installtime} %{version}-%{release}.%{arch}\n' | sort -n -k1 | tail -1 | cut -d ' ' -f 2`" = "`uname -r`" ]; then echo "latest kernel already booted."; else echo "new kernel. reboot required."; fi