Site icon Kiso

Tìm hiểu và vận dụng systemd để quản lý hệ thống Linux (phần cơ bản)

Tìm hiểu và vận dụng systemd để quản lý hệ thống Linux (phần cơ bản) 1

Mở đầu

Sau một thời gian tìm hiểu các kiến thức cơ bản về Linux và viết các bài trong series Linux for dummy. Hiện nay, mình cũng tích cóp được kha khá kiến thức về hệ thống Linux. Tuy chưa đến mức pro như các chuyên gia quản trị hệ thống, hay các hacker nổi tiếng toàn cầu nhưng như vậy cũng là đủ để có thể hiểu được một hệ thống Linux sẽ có những cái gì.
Mặc dù còn rất nhiều vấn đề căn bản mình có thể tìm hiểu và viết tiếp bài vào series Linux for dummy nhưng mình sẽ kết thúc nó tại đây và bắt đầu một series mới với những kiến thức nâng cao hơn, đó chính là series về Linux advance articles. Và với bài mở đầu của series, mình sẽ viết về systemd, một thành phần rất quan trọng trong hệ thống hiện đại ngày nay, được sử dụng để quản lý hệ thống Linux, đặc biệt là các tiến trình và chương trình do hệ thống thực thi.

Một chút khái niệm về Systemd

Nhắc đến Systemd, nếu như là lần đầu nghe thấy, thì có lẽ không chỉ riêng mình mà rất nhiều người sẽ đặt câu hỏi: liệu tên nó có ý nghĩ gì. Nếu là vì nó dùng để quản lý hệ thống, vậy thì sao không để là system management mà lại là systemd, chữ d ở đây nghĩa là gì chứ @@. Và rồi khi mình tìm hiểu một vài bài viết thì cũng phần nào đoán ra được ý nghĩa của nó. d có ý nghĩa là daemon, có ý chỉ một cái gì đó âm thầm lặng lẽ hoạt động mà bình thường ta không biết được, và ở trong hệ thống Linux thì nó chính là các tiến trình chạy dưới nền (background process). Các tiến trình này cần phải hoạt động liên tục nhưng cũng không thể để người dùng ngồi nhìn nó chạy mãi được. Chính vì vậy, nó được chạy một cách “âm thầm”, thuật ngữ gọi là chạy ngầm. Người dùng nếu không để ý hoặc tìm hiểu về nó thì không thể biết được tiến trình đó đang hoạt động.
Nhưng systemd cũng không phải là để chỉ các tiến trình chạy ngầm đó, mà nó là một nhóm các chương trình đặc biệt sẽ quản lý, vận hành và theo dõi các tiến trình khác hoạt động.

Vai trò của Systemd trong hệ thống

Bắt đầu là khởi tạo

Bất cứ một chương trình nào trong Linux đều cần được thực thi dưới dạng một tiến trình (xem thêm Quản lý tiến trình trong Linux, và systemd cũng không ngoại lệ. Một trong các thành phần quan trọng này là khởi tạo hệ thống. Systemd cung cấp một chương trình đặc biệt là /sbin/init và nó sẽ là chương trình đầu tiên được khởi động trong hệ thống (PID = 1). Và khi hoạt động, /sbin/init sẽ giữ vai trò kích hoạt các file cấu hình cần thiết cho hệ thống, và các chương trình này sẽ tiếp nối để hoàn tất công đoạn khởi tạo.

Các thành phần của Systemd

Về cơ bản thì systemd tương đương với một chương trình quản lý hệ thống và các dịch vụ trong Linux. Nó cung cấp một số các tiện ích như sau

Unit file

Tất cả các chương trình được quản lý bởi systemd đều được thực thi dưới dạng daemon hay background bên dưới nền và được cấu hình thành 1 file configuration gọi là unit file. Các unit file này sẽ bao gồm 12 loại:

Service

Mặc dù là có 12 loại unit file trong systemd, tuy nhiên có lẽ service là loại thường được quan tâm nhất. Loại này sẽ được khởi động khi bật máy và luôn chạy ở chế độ nền (daemon hoặc background)
Các service thường sẽ được cấu hình trong các file riêng biệt và được quản lý thông qua câu lệnh systemctl
Ta có thể sử dụng câu lệnh sau để xem các service đã được kích hoạt bởi hệ thống: systemctl list-units | grep -e '.service' hoặc systemctl -t service
Bộ ba tùy chọn quen thuộc của systemctl sẽ dùng khi muốn bật/tắt một service

Các hệ thống tương tự Systemd

Systemd mới chỉ xuất hiện từ 30-3-2010, còn trước đó có 2 hệ thống khác đã từng được sử dụng

Tạo service với Systemd

Phần trên mình đã nói về việc các service của systemd được quản lý trong các file cấu hình riêng biệt. Vì vậy, chúng ta hoàn toàn có thể tạo ra một file service của chúng ta để phục vụ một công việc nào đó. Mình sẽ ví dụ với một file cấu hình đơn giản như sau

# Location: /etc/systemd/system/simple-echo.service
[Unit]
Description=Simple Echo

[Service]
Type = forking
ExecStart = /usr/local/bin/simple-echo start
ExecStop = /usr/local/bin/simple-echo stop
ExecReload = /usr/local/bin/simple-echo restart

[Install]
WantedBy = multi-user.target

Và đây là file thực thi của dịch vụ

#!/bin/bash
# Location: /usr/local/bin/simple-echo

function echo_start () {
  echo "Echo: starting service ..."
  sleep 1
  echo "Echo: starting done"
}

function echo_stop () {
  echo "Echo: stopping service ..."
  sleep 1
  echo "Echo: stopping done"
}

function echo_status () {
  echo "Echo service"
}

case "$1" in
  'start')
    echo_start
    ;;
  'stop')
    echo_stop
    ;;
  'restart')
    echo_start
    sleep 1
    echo_stop
    ;;
  'status')
    echo_status
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart}" >&2
    ;;
esac

Và giờ ta có thể thử với các câu lệnh systemctl status simple-echo hoặc systemctl start simple-echo, nếu các câu lệnh này không báo lỗi thì quá trình tạo một service đơn giản đã thành công.
(Đây chỉ một file cấu hình đơn giản của service, thực chất không có chương trình nào khác được thực thi.)

Kết luận

Systemd là một chương trình quản lý rất nhiều tính năng, giúp cho việc quản lý hệ thống trở nên dễ dàng hơn. Hy vọng từ bài viết này mọi người có thể phần nào hiểu được tác dụng và vai trò của systemd trong hệ thống Linux. Cảm ơn mọi người đã đọc bài viết.

Tài liệu tham khảo

Exit mobile version