Назад | Перейти на главную страницу

Необходимо проверить, требуется ли перезагрузка для обновления ядра?

Я использую Ansible, чтобы проверить хосты, нужно ли их перезагружать, если /vmlinuz ядро не разрешает uname -r.

В if условие, хотя всегда идентифицирует перезагрузку, даже если тестовая машина была перезагружена и ядро ​​разрешается в то же ядро:

если [$ (ссылка для чтения -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

В этом примере он не совпадает, и требуется перезагрузка.

Вы можете использовать тест для сравнения строк:

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