はじめに
サーバー運用していると脆弱性対応などでパッケージのバージョンアップを行うことがよくあります。
その際、稼働中のサーバーへの影響の一つとしてサービスの再起動の発生が気になるところです。
今回はそういった場面で何を再起動したら良いかを確認する方法です。
コマンドインストール
Ubuntu では checkrestart
コマンドで再起動が必要なプロセスを確認できます。
まず、コマンドのインストールですが、これは debian-goodies
というパッケージに入っています。
$ sudo apt-get install debian-goodies
$ which checkrestart
/usr/sbin/checkrestart
再起動プロセスの確認
では実際にチェックしてみます。
$ sudo checkrestart
Found 30 processes using old versions of upgraded files
(22 distinct programs)
(15 distinct packages)
Of these, 13 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:
haveged:
457 /usr/sbin/haveged
lvm2:
429 /sbin/lvmetad
acpid:
1225 /usr/sbin/acpid
cron:
1214 /usr/sbin/cron
accountsservice:
24306 /usr/lib/accountsservice/accounts-daemon
policykit-1:
1281 /usr/lib/policykit-1/polkitd
at:
1141 /usr/sbin/atd
rsyslog:
1198 /usr/sbin/rsyslogd
open-iscsi:
1144 /sbin/iscsid
1145 /sbin/iscsid
unattended-upgrades:
1279 /usr/share/unattended-upgrades/unattended-upgrade-shutdown
mdadm:
1270 /sbin/mdadm
dbus:
1173 /usr/bin/dbus-daemon
lxcfs:
1143 /usr/bin/lxcfs
These are the systemd services:
systemctl restart accounts-daemon.service
systemctl restart polkitd.service
These are the initd scripts:
service haveged restart
service lvm2-lvmpolld restart
service lvm2 restart
service lvm2-lvmetad restart
service acpid restart
service cron restart
service atd restart
service rsyslog restart
service open-iscsi restart
service iscsid restart
service unattended-upgrades restart
service mdadm-waitidle restart
service mdadm restart
service dbus restart
service lxcfs restart
These processes (2) do not seem to have an associated init script to restart them:
isc-dhcp-client:
980 /sbin/dhclient
dash:
1637 /bin/dash
再起動が必要なプロセスがたくさん出てきました。
ここで出力されている内容は systemd
または init
で管理されているかどうかで変わります。
対応1:systemd または initd で管理されている場合
init
で管理されている場合、以下の内容が出力されます。
The following packages seem to have definitions that could be used
to restart their services:
この場合、対応については続きに出力されているように systemctl
または service
コマンドを使って再起動します。
ここでは cron
の場合を例に対応します。
$ sudo service cron restart
対応2:systemd または initd で管理されていない場合
もう一つは以下の出力がされた場合の対応です。
These processes (2) do not seem to have an associated init script to restart them:
isc-dhcp-client:
980 /sbin/dhclient
dash:
1637 /bin/dash
これはプロセスが init
スクリプトに関連付けられていない場合に表示されます。
今回は dash
を例に対応していきたいと思います。
まず、ここではプロセスIDが 1637
と表示されています。
それでは該当のプロセスIDが利用しているプログラムを確認します。
$ cat /proc/1637/cmdline
/bin/sh/opt/bitnami/mysql/bin/mysqld_safe--defaults-file=/opt/bitnami/mysql/my.cnf--mysqld=mysqld.bin--socket=/opt/bitnami/mysql/tmp/mysql.sock--datadir=/opt/bitnami/mysql/data--log-error=/opt/bitnami/mysql/data/mysqld.log--pid-file=/opt/bitnami/mysql/data/mysqld.pid--lower-case-table-names=1
mysql
プロセスが利用していることがわかりました。
今回、bitnami 環境のため専用のスクリプト ctlscript.sh
を使って再起動を行います。
まず、利用方法について確認です。
$ sudo /opt/bitnami/ctlscript.sh --help
usage: /opt/bitnami/ctlscript.sh help
/opt/bitnami/ctlscript.sh (start|stop|restart|status)
/opt/bitnami/ctlscript.sh (start|stop|restart|status) mysql
/opt/bitnami/ctlscript.sh (start|stop|restart|status) php-fpm
/opt/bitnami/ctlscript.sh (start|stop|restart|status) apache
/opt/bitnami/ctlscript.sh (start|stop|restart|status) subversion
help - this screen
start - start the service(s)
stop - stop the service(s)
restart - restart or start the service(s)
status - show the status of the service(s)
それでは mysql
の再起動を行います。
$ sudo /opt/bitnami/ctlscript.sh restart mysql
Unmonitored mysql
/opt/bitnami/mysql/scripts/ctl.sh : mysql stopped
/opt/bitnami/mysql/scripts/ctl.sh : mysql started at port 3306
Monitored mysql
以上で再起動完了です。
確認
checkrestart
コマンドで確認してみます。
$ sudo checkrestart
Found 28 processes using old versions of upgraded files
(20 distinct programs)
(13 distinct packages)
Of these, 12 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:
haveged:
457 /usr/sbin/haveged
lvm2:
429 /sbin/lvmetad
dbus:
1173 /usr/bin/dbus-daemon
accountsservice:
24306 /usr/lib/accountsservice/accounts-daemon
policykit-1:
1281 /usr/lib/policykit-1/polkitd
at:
1141 /usr/sbin/atd
rsyslog:
1198 /usr/sbin/rsyslogd
open-iscsi:
1144 /sbin/iscsid
1145 /sbin/iscsid
lxcfs:
1143 /usr/bin/lxcfs
mdadm:
1270 /sbin/mdadm
acpid:
1225 /usr/sbin/acpid
unattended-upgrades:
1279 /usr/share/unattended-upgrades/unattended-upgrade-shutdown
These are the systemd services:
systemctl restart accounts-daemon.service
systemctl restart polkitd.service
These are the initd scripts:
service haveged restart
service lvm2-lvmpolld restart
service lvm2 restart
service lvm2-lvmetad restart
service dbus restart
service atd restart
service rsyslog restart
service open-iscsi restart
service iscsid restart
service lxcfs restart
service mdadm-waitidle restart
service mdadm restart
service acpid restart
service unattended-upgrades restart
These processes (1) do not seem to have an associated init script to restart them:
isc-dhcp-client:
980 /sbin/dhclient
対応を行なった cron
と dash
の2つが出力されなくなったのが確認できました。
おわりに
パッケージをアップデートした際、再起動が必要かどうかが気になるところですがこのコマンドを使うことで解決できるのはとても助かるなと思いました。