Trang Chủ >Kiến thức dịch vụ > KB & Tips > Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 2 – Systemd

Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 2 – Systemd

Nối tiếp phần 1 tại https://vcloud.vn/dieu-hanh-centos-7-co-gi-moi-va-khac-voi-centos-6-phan-1 VCLOUD tiếp tục giới thiệu phần 2 của loạt series tìm hiểu về Centos 7 với chi tiết hơn về những thay đổi trong hệ thống để giúp người dùng thấy được sự thay thế hoàn hảo của những tính năng mới. Một trong những tính năng đó là systemd

Systemd thay thế hoàn toàn cho initd, nó thực sự nhanh hơn vì sử dụng ít scripts hơn và cho phép thực hiện nhiều  hơn những công việc song song. systemd gọi nó là các units

File cấu hình chung của systemd nằm trong thư mục /etc/systemd

File cấu hình các service thì nằm trong /usr/lib/systemd

Các file custome config thì đặt trong /etc/systemd/system, đặc biệt đôi khi thư mục /run/systemd/system cũng đc sử dụng

Để xem phiên bản của systemd hiện tại, sử dụng lệnh:

# systemctl --version
systemd 208
+PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ

Nhiệm vụ chính của systemd là quản lý các boot process và cung cấp thông tin về nó

# systemd-analyze
Startup finished in 422ms (kernel) + 2.722s (initrd) + 9.674s (userspace) = 12.820s

Để xem các service trong quá trình boot của nó, ta sử dụng lệnh như sau:

# systemd-analyze blame
7.029s network.service
2.241s plymouth-start.service
1.293s kdump.service
1.156s plymouth-quit-wait.service
1.048s firewalld.service
632ms postfix.service
621ms tuned.service
460ms iprupdate.service
446ms iprinit.service
344ms accounts-daemon.service
...
7ms systemd-update-utmp-runlevel.service
5ms systemd-random-seed.service
5ms sys-kernel-config.mount

systemd cho phép hiển thị những process quan trọng nhất trong khi khởi động service với tùy chọn critical chain

# systemd-analyze critical-chain
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

multi-user.target @6.167s
└─mariadb.service @2.661s +3.505s
  └─network.target @2.649s
    └─network.service @2.168s +478ms
      └─NetworkManager.service @1.993s +174ms
        └─firewalld.service @826ms +1.162s
          └─basic.target @822ms
            └─sockets.target @821ms
              └─dbus.socket @820ms
                └─sysinit.target @813ms
                  └─systemd-update-utmp.service @806ms +6ms
                    └─auditd.service @747ms +58ms
                      └─local-fs.target @742ms
                        └─boot.mount @709ms +32ms
                          └─systemd-fsck@dev-disk-by\x2duuid-497a43ab\x2d33b0\x2
                            └─dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9f

 

hay critical chain với 1 service cụ thể

# systemd-analyze critical-chain firewalld.service
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

firewalld.service +1.162s
└─basic.target @822ms
  └─sockets.target @821ms
    └─dbus.socket @820ms
      └─sysinit.target @813ms
        └─systemd-update-utmp.service @806ms +6ms
          └─auditd.service @747ms +58ms
            └─local-fs.target @742ms
              └─boot.mount @709ms +32ms
                └─systemd-fsck@dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9
                  └─dev-disk-by\x2duuid-497a43ab\x2d33b0\x2d4153\x2d9f8d\x2d7788

Để xem sự phụ thuộc (dependencies) của các services

# systemctl list-dependencies
default.target
├─abrt-ccpp.service
├─abrt-oops.service
...
├─tuned.service
├─basic.target
│ ├─firewalld.service
│ ├─microcode.service
...
├─getty.target
│ ├─getty@tty1.service
│ └─serial-getty@ttyS0.service
└─remote-fs.target

Xem dependencies của 1 services cụ thể:

# systemctl list-dependencies sshd.service

Journal Analysis

Trong Centos 7, systemd sẽ xử lý các log sự kiện thông qua Journald, đây là một tính năng rất hay và đáng giá

Chẳng hạn, để xem tất cả các sự kiện liên quan đến sshd process, ta dùng lệnh:

# journalctl /sbin/sshd
hoặc
# journalctl --unit=sshd

Để hiển thị tất cả các sự kiện trong lần boot cuối cùng:

# journalctl -b

hay chỉ là của ngày hôm nay:

# journalctl --since=today

hoặc các sự kiện liên quan đến lỗi

# journalctl -p err

Mặc đinh, Journald logs được lưu trong thư mục /run/log/journal  và sẽ biến mất sau quá trình khởi động
Để lưu Journald logs cho mục đích xem lại ta làm như sau:

# mkdir /var/log/journal
# echo "SystemMaxUse=50M" >> /etc/systemd/journald.conf
# systemctl restart systemd-journald 

Control Groups

Systemd tổ chức các process bằng các nhóm điều khiển, đây là khái niệm mới trong Centos 7. Một ví dụ cho nó là tất cả các process khởi tạo bới apache webserver sẽ nằm trong cùng 1 control group, kể cả các CGI scripts.

Để hiển thị cấu trúc thư mục của control groups:

# systemd-cgls
├─user.slice
│ └─user-1000.slice
│ └─session-1.scope
│ ├─2889 gdm-session-worker [pam/gdm-password]
│ ├─2899 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2901 gnome-session --session gnome-classic
. .
└─iprupdate.service
└─785 /sbin/iprupdate --daemon

Hiển thị danh mục control group sắp xếp theo CPU, memory hay disk I/O load:

# systemd-cgtop
Path Tasks %CPU Memory Input/s Output/s
/ 213 3.9 829.7M - -
/system.slice 1 - - - -
/system.slice/ModemManager.service 1 - - - -

Để kết thúc tất cả các processes trong apache server (bao gồm cảCGI scripts):

# systemctl kill httpd

Giới hạn tài nguyên trên 1 services:

# systemctl set-property httpd.service CPUShares=500

Chú ý: Mặc định, mỗi service có 1024 CPUShares. Tất nhiên ta có thể tăng hoặc giảm nó theo ý muốn

Để xem giá trị  của CPUShares service:

# systemctl show -p CPUShares httpd.service
CPUShares=500

Or:

# systemctl show httpd.service | grep CPUShares
CPUShares=500

Service Management

systemctl thay thế cho các lệnh chkconfig và service.

Ví dụ để active ntpd lúc khởi động

# systemctl enable ntpd

Note1: Cú pháp chuẩn phải là ntpd.service nhưng mặc định .service sẽ tự động được thêm vào.
Note2: nếu là đường dẫn, .mount sẽ được thêm vào.
Note3: Nếu là thiết bị,  .device sẽ được thêm vào.

Để deactivate, start, stop, restart, reload một service:

# systemctl disable ntpd
# systemctl start ntpd
# systemctl stop ntpd
# systemctl restart ntpd
# systemctl reload ntpd

Kiểm tra NTP service có active lúc khởi động:

# systemctl is-enabled ntpd
enabled

Kiểm tra NTP service có hoạt động:

# systemctl is-active ntpd
inactive

Lấy trạng thái của sshd services :

# systemctl status sshd
sshd.service - OpenSSH server daemon
 Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
 Active: active (running) since Sun 2016-04-17 15:39:19 ICT; 42min ago
 Docs: man:sshd(8)
 man:sshd_config(5)
 Main PID: 714 (sshd)
 CGroup: /system.slice/sshd.service
 └─714 /usr/sbin/sshd -D

Targets/Run Levels

Systemd sử dụng các targets.  Một target là một kỹ thuật ghép nhóm cho phép nhiều services khởi động cùng lúc. Các services này được kết hợp với một target cụ thể và được lưu trong thư mục cùng tên với tên targer và thêm hậu tố “.wants”. Thực tế, targer thay thế các run levels nhưng nó trìu tượng hơn. Chẳng hạn để đửa Centos 7 vào chế độ maintenance mode:

# systemctl rescue

Để chuyển sang level 3:

# systemctl isolate runlevel3.target

hay

# systemctl isolate multi-user.target

Để chuyển sang chế độ đồ họa:

# systemctl isolate graphical.target

hay chế độ không dùng GUI:

# systemctl set-default multi-user.target

Set run level mặc định ở chế độ đồ họa:

# systemctl set-default graphical.target

Kiểm tra run level đang chạy

# systemctl get-default
graphical.target

Để stop a server:

# systemctl poweroff

Note: Ta vẫn có thể dùng poweroff  1 cách bình thường, tuy nhiên 1 link đã được tạo để kết nối đến systemctl command và các option halt hay reboot cũng tương tự như vậy:

 

# systemctl reboot
# systemctl suspend
# systemctl hibernate

 

 

 

 

 

Hỗ trợ Kinh Doanh
0908.751868 Mr.Tài
sales@vcloud.vn
Hỗ Trợ Kỹ Thuật
0933 167 123 Mr.Trí
support@vcloud.vn
Tư vấn Máy Chủ
0933 167 123 Mr.Trí
support@vcloud.vn
ĐỐI TÁC