Life would be so much simple if we don't care so much


Cách phát hiện các service cần thiết nên restart sau khi update package trong Linux

Mở đầu

Để giảm bớt lỗi hệ thống thì việc update system là thường xuyên phải được tiến hành nhưng đối với hệ thống đang vận hành trên real thì chúng ta muốn giảm tối đa những ảnh hưởng đến các service.
Sau khi update hệ thống, nếu có thể thì chúng ta muốn hoàn tất việc restart chỉ những process cần thiết nhưng nên restart những process nào thì tốt? Cơ bản là nếu không restart OS thì sẽ không phản ánh được những thay đổi chăng? Các trường hợp không cần phải restart OS thì cũng không ít.

Đối với những trường hợp như vậy, thì cần phải tìm ra những process cần thiết cần được restart, có command để check được advice có cần phải restart system hay không?

Hệ Redhat
Sử dụng Package「yum-utils」có chứa command「needs-restarting

# needs-restarting -h
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
  -r, –reboothint  only report whether a full reboot is required (returns 1)
                    or not (returns 0)
  -s, –services    list the affected systemd services only
Trường hợp dùng RHEL/CentOS thì các option「-r、-s」được thêm vào từ ver7.3 trở lên  ⇒
Release note (https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.3_Release_Notes/index.html)

1.Install  

# yum install yum-utils

2.Test thử bằng cách update openssl

# yum update openssl

3.Hiển thị các process cần phải update

# needs-restarting | sort -g
805 : /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-enp0s3.pid -lf /var/lib/NetworkManager/dhclient-3b2440fa-27a4-4e0e-8549-888b68d3f2d4-enp0s3.lease -cf /var/lib/NetworkManager/dhclient-enp0s3.conf enp0s3
1011 : /usr/bin/python -Es /usr/sbin/tuned -l -P
1023 : /usr/sbin/sshd
1129 : /usr/libexec/postfix/master -w
1147 : pickup -l -t unix -u
1148 : qmgr -l -t unix -u
1296 : sshd: root@pts/0  

4.Thêm option「-s, –services」để hiển thị service name của systemd

# needs-restarting -s | sort
NetworkManager.service
postfix.service
sshd.service
tuned.service

5.Restart service, confirm lại 1 lần nữa

# systemctl restart NetworkManager postfix sshd tuned

# needs-restarting
#  ← ★Các process nên được restart đều đã biến mất★

6.Tuy nhiên nếu thêm option -r và confirm thì sẽ được recommend thực hiện reboot 
# needs-restarting -r
Core libraries or services have been updated:
  openssl-libs -> 1:1.0.1e-60.el7_3.1

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

More information: https://access.redhat.com/solutions/27943

Nếu nhìn vào message hiển thị có chứa page URL,  thì với trường hợp nếu có 1 số core libraries và service đã được update thì message sẽ hiển thị nhằm thông báo việc restart lại hệ thống.

Redhat Knowledge Base  <Subcription required>

⇒ Dựa theo source code trên thì dưới đây là 8 package mà khi update thường sẽ hiển thị thông báo nên update hệ thống
『dbus、glibc、gnutls、linux-firmware、kernel、openssl-libs、systemd、udev』
Source code:git://yum.baseurl.org/yum-utils.git/needs-restarting.py

Thêm vào đó, ở release note 7.3 thì được nói như sau (trừ 1 phần ngoại lệ)
needs-restarting trong ultility đã được thêm vào option mới –reboothint
Lần này, needs-restarting trong ultility được thêm vào option mới —reboothint. needs-restarting trong ultility đã được thêm vào option mới –reboothint. Khi thực thi needs-restarting —reboothint thì từ lần boot trước những core library tương ứng nào đang được update? reboot có tiếp tục tiến hành hay không ? thì hệ thống sẽ xuất thông báo. Ở đây thì , để tất cả các update được apply thì việc quyết định reboot hệ thống hay không sẽ có hữu ích cho người quản lý system. Chú ý là những thông báo này chỉ mang tính cung cấp thông tin chứ không phải là nhất thiết phải reboot hệ thống ngay lập tức.

Trường hợp các process restart ngoài process systemd ra

Chúng ta có thể tự check các process được trực tiếp start build từ source. Dưới đây là trường hợp sau khi overwrite file binary, sử dụng needs-restarting để check trong lúc h2o của HTTP server đang running

# needs-restarting
17648 : /usr/local/bin/h2o -c /etc/h2o/h2o.conf

Hệ Debian
Sử dụng package「debian-goodies」có chứa command「checkrestart」

Debian Manpages

NAME
checkrestart – check which processes need to be restarted after an upgrade

SYNOPSIS
checkrestart [ -hvpan ] [ -b blacklist_file ] [ -i package_name ] [ -e pid ]

1.Install

# apt-get install debian-goodies
2.Hiển thị các processs cần được restart

# checkrestart -a
Found 2 processes using old versions of upgraded files
(1 distinct program)
(1 distinct packages)

Of these, 1 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:
        1411    /usr/sbin/sshd
        1354    /usr/sbin/sshd
These are the initd scripts:
service ssh restart

*** Không có option tương tự như —reboothint của lệnh needs-restarting

Kết thúc

Có lẽ là việc sử dụng các command trong bài này thì không hẳn là sẽ tăng viễn cảnh có thể maintenance mà không cần phải restart OS. Ngoài ra, đối với OS restart sau khi update, có thể sử dụng để check lại các trạng thái process không reflect khi quên restart process

Link nguồn

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: