June 7, 2020

Centos8にはneeds-restartingコマンドが無い?

まとめ

CentOS8でもyum-utils入れればCentOS7と同じようにneeds-restarting使えるけど、dnfに統合されたからyum-utils入れなくてもdnf needs-restartingでいい。

CentOS7

CentOS7ではyum updateした後、OSが再起動が必要な状態かどうか調べるのに、yum-utilsに入っているneeds-restartingが使える。

[vagrant@centos7 ~]$ whereis needs-restarting
needs-restarting: /usr/bin/needs-restarting /usr/share/man/man1/needs-restarting.1.gz
[vagrant@centos7 ~]$ rpm -qf /usr/bin/needs-restarting
yum-utils-1.1.31-54.el7_8.noarch

OS再起動が不要ならその旨メッセージが出るし、コマンド戻り値は0

[vagrant@centos7 ~]$ needs-restarting -r
No core libraries or services have been updated.
Reboot is probably not necessary.
[vagrant@centos7 ~]$ echo $?
0

OS再起動が必要ならその旨メッセージが出るし、コマンド戻り値は1

[vagrant@centos7 ~]$ needs-restarting -r
Core libraries or services have been updated:
  systemd -> 219-73.el7_8.6
  kernel -> 3.10.0-1127.10.1.el7

Reboot is required to ensure that your system benefits from these updates.

More information:
https://access.redhat.com/solutions/27943
[vagrant@centos7 ~]$ echo $?
1

yum-cronで定期更新を設定し、rootで以下のcronを書いておけば、再起動が必要な更新をしたら月曜朝5時に再起動してくれる。

[vagrant@centos7 ~]$ sudo crontab -l
0 5 * * 1 /usr/bin/needs-restarting -r > /dev/null || /usr/sbin/shutdown -r 3

CentOS8

CentOS8でもyum-utilsパッケージが入っていれば、CentOS7と同じようにneeds-restartingコマンドが使える。

[vagrant@centos8 ~]$ whereis needs-restarting
needs-restarting: /usr/bin/needs-restarting /usr/share/man/man1/needs-restarting.1.gz
[vagrant@centos8 ~]$ rpm -qf /usr/bin/needs-restarting
yum-utils-4.0.8-3.el8.noarch

yum-utilsでインストールされる/usr/bin/以下のコマンド達は/usr/libexec/dnf-utilsへのシンボリックリンクでしかない。

[vagrant@centos8 ~]$ ls -l `rpm -ql yum-utils | grep /usr/bin/`
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/debuginfo-install -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/find-repos-of-install -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/needs-restarting -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/package-cleanup -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repo-graph -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repoclosure -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repodiff -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repomanage -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repoquery -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/reposync -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/repotrack -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/yum-builddep -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/yum-config-manager -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/yum-debug-dump -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/yum-debug-restore -> /usr/libexec/dnf-utils
lrwxrwxrwx. 1 root root 22 11月 13  2019 /usr/bin/yumdownloader -> /usr/libexec/dnf-utils

man dnf-utilsによると、dnf needs-restartingにマップされているだけ。

needs-restarting(1)
        Check for running processes that should be restarted.  Maps to dnf needs-restarting.

どちらを実行しても結果は同じなので、dnf needs-restartingを覚える。

[vagrant@centos8 ~]$ needs-restarting -r
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.
[vagrant@centos8 ~]$ dnf needs-restarting -r
No core libraries or services have been updated since boot-up.
Reboot should not be necessary.

© 2020 nissy-lab.com