Nối tiếp phần 1 tại https://3tvn.net/dieu-hanh-centos-7-co-gi-moi-va-khac-voi-centos-6-phan-1 3TVN 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
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
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
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
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