needs-restartingで再起動が必要なプロセスを調べる

Linuxサーバを再起動することなく全てのアップデートを反映させる方法がないか調べていたら「needs-restarting」というコマンドを発見したので備忘録として残します。

needs-restartingはyum-utilsに含まれるツールの一つ

試したサーバには既にneeds-restartingが導入されていたのでインストール作業は不要でしたが、本来はyum-utilsに含まれるツールの一つなようです。

# whereis needs-restarting
needs-restarting: /usr/bin/needs-restarting /usr/share/man/man1/needs-restarting.1.gz

# yum provides /usr/bin/needs-restarting
yum-utils-1.1.30-40.el6.noarch : Utilities based around the yum package manager
Repo        : base
Matched from:
Filename    : /usr/bin/needs-restarting

yum-utils-1.1.30-40.el6.noarch : Utilities based around the yum package manager
Repo        : installed
Matched from:
Other       : Provides-match: /usr/bin/needs-restarting
needs-restartingの詳細

CentOS6で利用できるneeds-restartingのオプションは以下の通り。CentOS7で利用できるバージョンだともっと高機能でサーバ再起動が必要かチェックしてくれるらしいのです。

# needs-restarting --help
Usage:
    needs-restarting: Report a list of process ids of programs that started
                    running before they or some component they use were updated.

Options:
  -h, --help      show this help message and exit
  -u, --useronly  show processes for my userid only
needs-restartingを試してみる

5か月間していないサーバで試してみました。

# uptime
 10:51:15 up 157 days,  5:40,  1 user,  load average: 0.34, 0.24, 0.08

# needs-restarting
1234 : /usr/sbin/acpid
2323 : /sbin/mingetty/dev/tty2
2321 : /sbin/mingetty/dev/tty1
1223 : irqbalance--pid=/var/run/irqbalance.pid
1208 : /sbin/rsyslogd-i/var/run/syslogd.pid-c5
2325 : /sbin/mingetty/dev/tty3
2229 : /usr/libexec/postfix/master
1186 : auditd
5348 : /usr/sbin/httpd
2328 : /sbin/agetty/dev/ttyS0115200vt100-nav
2305 : /usr/sbin/atd
1 : /sbin/init
536 : /sbin/udevd-d
19315 : /sbin/udevd-d
2269 : crond
2257 : /usr/bin/python/usr/sbin/tuned-d-c/etc/tuned.conf
2241 : qmgr-l-tfifo-u
19314 : /sbin/udevd-d
19747 : /usr/sbin/sshd

結構ありました。Linuxはアップデートしてもサーバ再起動が不要というイメージがあるようですが、全然そんなことはないことが分かります。

可能なデーモンはどんどん再起動してみる

以下のプロセス(デーモン)はプロセスだけの再起動が可能でした。

# service acpid restart
# service irqbalance restart
# service rsyslog restart
# service postfix restart
# service auditd restart
# service httpd restart
# service atd restart
# udevadm control --reload-rules
# service crond restart
# service tuned restart
# service sshd restart
OS再起動以外で再起動する方法がわからないプロセス

色々試しましたが、私のスキルでは単独で再起動できないプロセスがこれらでした。PID:1の/sbin/initなんてカーネルが最初に読み込むプロセスですもんね。どうやっても無理じゃないのかな?ということで、最終的にOS再起動を行いました。

# needs-restarting
2323 : /sbin/mingetty/dev/tty2
2321 : /sbin/mingetty/dev/tty1
2325 : /sbin/mingetty/dev/tty3
2328 : /sbin/agetty/dev/ttyS0115200vt100-nav
1 : /sbin/init
536 : /sbin/udevd-d
終わりに

httpdやpostfixなど直接機能を提供するデーモンならアップデート後の再起動は忘れませんが、nssのように間接的な機能のアップデートは影響範囲が分からないですからね。そういう時にneeds-restartingは役立ちそうです。

スポンサーリンク