概要
Linuxでパッケージをアップデートしたあとにプロセスを再起動しないといかないものがあります。
例えば、openssl をアップデートしたあとは、Apache のプロセスを再起動するということが必要になります。
サーバマシン自体をリブートしてしまうのが手っ取り早いとは思いますが、
冗長化していようと、サービスを提供しているサーバではそうそうリブートすることは難しいと思います。
そんなとき最小限かつ、しっかりと必要なプロセスを再起動する方法をご紹介したいと思います。
解決方法
Debian系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# checkrestart -a Found 11 processes using old versions of upgraded files (5 distinct programs) (4 distinct packages) Of these, 3 seem to contain systemd service definitions or init scripts which can be used to restart them. The following packages seem to have definitions that could be used to restart their services: openssh-server: 24652 /usr/sbin/sshd 24706 /usr/sbin/sshd 1180 /usr/sbin/sshd php7.0-fpm: 16771 /usr/sbin/php-fpm7.0 16835 /usr/sbin/php-fpm7.0 16834 /usr/sbin/php-fpm7.0 ntp: 1355 /usr/sbin/ntpd These are the initd scripts: service ssh restart service php7.0-fpm restart service ntp restart These processes (1) do not seem to have an associated init script to restart them: mysql-server-core-5.7: 1185 /usr/sbin/mysqld |
上記は ubuntu (Debian系)における確認方法です。 ※Ubuntu 16.04.3 LTS を使用しています
丁寧に再起動方法も記載されています。
Redhat系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# needs-restarting 692 : /usr/sbin/rsyslogd -n 656 : /usr/lib/polkit-1/polkitd --no-debug 30677 : sshd: root@pts/0 708 : /sbin/agetty --noclear tty1 linux 624 : /sbin/auditd 704 : /usr/sbin/atd -f 30679 : -bash 695 : /usr/sbin/NetworkManager --no-daemon 663 : /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 987 : /usr/bin/python -Es /usr/sbin/tuned -l -P 661 : /usr/lib/systemd/systemd-logind 673 : /usr/sbin/chronyd 1 : /usr/lib/systemd/systemd --system --deserialize 22 1582 : qmgr -l -t unix -u 654 : /usr/sbin/irqbalance --foreground 488 : /usr/lib/systemd/systemd-journald 1499 : /usr/libexec/postfix/master -w 30672 : pickup -l -t unix -u 515 : /usr/sbin/lvmetad -f 30962 : /usr/lib/systemd/systemd-udevd # needs-restarting -s chronyd.service systemd-logind.service atd.service NetworkManager.service postfix.service dbus.service auditd.service getty@tty1.service lvm2-lvmetad.service rsyslog.service systemd-journald.service tuned.service systemd-udevd.service polkit.service irqbalance.service # needs-restarting -r Core libraries or services have been updated: kernel -> 3.10.0-693.11.6.el7 linux-firmware -> 20170606-57.gitc990aae.el7 glibc -> 2.17-196.el7_4.2 systemd -> 219-42.el7_4.4 Reboot is required to ensure that your system benefits from these updates. More information: https://access.redhat.com/solutions/27943 |
上記は CentOS (Redhat系)における確認方法です。 ※ CentOS 7 を使用しています。
needs-restarting コマンドには、sオプションというものがあります。
man コマンドで見てみると、「List the affected systemd services only.」と書かれています。
つまり、sオプションを使用すると 再起動が必要なプロセスのうち、systemd で管理されているサービスのみを表示できます。
逆に service で管理されている場合は sオプションをつけると見ることができないということになります。
また、rオプションをつけるとサーバ(OS)のリブートが必要なプロセスが出てくるためそちらも確認すると良いと思います。
カーネルのアップデートになると思うので気づくと思いますが大量にアップデートがかかった場合見落とすこともあるので確認したほうがいいです。
最後に
特にセキュリティ関連でパッケージのアップデートを行うことが多いと思います。
しかし、パッケージのアップデートをしたからといってプロセスの再起動を行わないと反映されていない状態となり問題は解決されません。
今回紹介したcheckrestartコマンド、needs-restartingコマンドを使用して安全なサーバ運用を行っていただければと思います。