Site icon Cung cấp dịch vụ Cloud VPS, Server, Hosting Việt Nam & Thế giới

Tìm Hiểu Về Systemd Units và Tệp Đơn Vị trong Linux

Tìm Hiểu Về Systemd Units và Tệp Đơn Vị trong Linux

Ngày càng nhiều bản phân phối Linux chuyển sang sử dụng systemd làm hệ thống khởi động chính. Đây là một bộ công cụ mạnh mẽ, có khả năng quản lý và điều phối các khía cạnh quan trọng của hệ thống, bao gồm dịch vụ, thiết bị gắn ngoài và trạng thái hệ thống.

Trong systemd, khái niệm “unit” đề cập đến bất kỳ tài nguyên nào mà hệ thống có thể nhận diện và quản lý. Các tài nguyên này là đối tượng chính mà systemd có thể điều khiển thông qua các công cụ quản lý của mình. Những tài nguyên này được cấu hình thông qua các tệp tin gọi là unit files.

Bạn đang tìm hiểu về systemd units để quản lý hệ thống Linux? Để triển khai hiệu quả, một VPS giá rẻ chất lượng là lựa chọn tối ưu. Khám phá các gói VPS tại DataOnline với giá chỉ từ 102.000 VNĐ/năm, đảm bảo hiệu suất cao và hỗ trợ 24/7!

Bài viết này sẽ cung cấp cho bạn cái nhìn tổng quan về các loại unit mà systemd có thể xử lý. Chúng tôi cũng sẽ giới thiệu một số chỉ thị (directive) quan trọng trong các tệp unit, giúp bạn tùy chỉnh và quản lý tài nguyên trên hệ thống của mình hiệu quả hơn.

Systemd Units mang lại lợi ích gì cho bạn ?

Các unit là đối tượng mà systemd biết cách quản lý. Về cơ bản, chúng là sự biểu diễn tiêu chuẩn hóa của các tài nguyên hệ thống mà bộ các tiến trình nền (daemon) và các tiện ích đi kèm có thể thao tác được.

Có thể nói rằng các unit tương tự như các dịch vụ hoặc các tác vụ (jobs) trong các hệ thống khởi động khác. Tuy nhiên, khái niệm unit lại mở rộng hơn nhiều, vì chúng có thể được dùng để trừu tượng hóa các dịch vụ, tài nguyên mạng, thiết bị, điểm gắn của hệ thống tập tin, cũng như các nhóm tài nguyên độc lập.

Những ý tưởng mà trong các hệ thống khởi động khác có thể được xử lý thông qua một định nghĩa dịch vụ thống nhất, giờ đây có thể được tách ra thành các unit thành phần theo từng chức năng. Điều này giúp tổ chức theo chức năng, cho phép bạn dễ dàng kích hoạt, tắt hoặc mở rộng tính năng mà không cần phải thay đổi hành vi cốt lõi của một unit.

Một số tính năng mà các unit có thể thực hiện một cách dễ dàng bao gồm:

Có rất nhiều lợi thế mà các unit của systemd mang lại so với các mục công việc trong các hệ thống khởi động khác, nhưng điều trên đủ để bạn hình dung được sức mạnh có thể khai thác thông qua các chỉ thị cấu hình gốc.

Các tệp đơn vị của Systemd được tìm thấy ở đâu ?

Các tệp định nghĩa cách mà systemd sẽ quản lý một unit có thể được tìm thấy ở nhiều vị trí khác nhau, mỗi vị trí có mức độ ưu tiên và ý nghĩa riêng.

Các loại đơn vị

Systemd phân loại các unit theo loại tài nguyên mà chúng mô tả. Cách dễ nhất để xác định loại của một unit là nhìn vào hậu tố (suffix) của tên tài nguyên. Danh sách sau mô tả các loại unit có sẵn trong systemd:

Như bạn có thể thấy, có rất nhiều loại unit khác nhau mà systemd có thể quản lý. Nhiều loại unit có thể hoạt động phối hợp với nhau để cung cấp các tính năng mở rộng; ví dụ, một số unit có thể được dùng để kích hoạt các unit khác và cung cấp chức năng kích hoạt.

Chúng ta sẽ chủ yếu tập trung vào các unit .service vì tính tiện dụng và sự nhất quán trong việc quản lý chúng của các quản trị viên hệ thống.

Cấu trúc của một tệp đơn vị

Cấu trúc nội bộ của các tệp unit được tổ chức thành các phần (sections). Mỗi phần được đánh dấu bằng cặp dấu ngoặc vuông “[” và “]” với tên phần được ghi bên trong. Mỗi phần kéo dài cho đến khi gặp phần kế tiếp hoặc đến cuối tệp.

Đặc điểm chung của các tệp đơn vị

Nhìn chung, systemd cho phép cấu hình dễ dàng và linh hoạt. Ví dụ, nó chấp nhận nhiều biểu thức boolean khác nhau (1, yes, on, true cho giá trị đúng và 0, no, off, false cho giá trị sai). Thời gian cũng được phân tích một cách thông minh, với giá trị không có đơn vị mặc định được hiểu là giây, và hỗ trợ kết hợp nhiều định dạng nội bộ.

Các chỉ thị trong phần

Phần đầu tiên trong hầu hết các tệp unit là phần [Unit]. Phần này thường được dùng để định nghĩa metadata cho unit và cấu hình mối quan hệ của unit với các unit khác.

Mặc dù thứ tự các phần không ảnh hưởng đến quá trình phân tích của systemd, nhưng phần này thường được đặt ở đầu vì nó cung cấp cái nhìn tổng quan về unit. Một số chỉ thị phổ biến trong phần [Unit] bao gồm:

Bằng cách sử dụng các chỉ thị này và một số chỉ thị khác, bạn có thể xác lập thông tin chung về unit cũng như mối quan hệ của nó với các unit khác và hệ điều hành.

Phía bên kia của tệp unit, phần cuối thường là phần [Install]. Phần này là tùy chọn và được dùng để định nghĩa hành vi của một unit khi nó được kích hoạt (enabled) hoặc tắt (disabled). Kích hoạt một unit có nghĩa là đánh dấu nó sẽ tự động khởi động khi hệ thống khởi động. Điều này thực hiện bằng cách gắn unit đó vào một unit khác nằm trong chuỗi các unit khởi động.

Chỉ có những unit có thể được kích hoạt mới có phần này. Các chỉ thị trong phần này định nghĩa hành động khi unit được kích hoạt:

Các chỉ thị riêng cho từng loại đơn vị

Nằm giữa hai phần trên, bạn có thể gặp các phần dành riêng cho loại unit cụ thể. Hầu hết các loại unit đều có những chỉ thị chỉ áp dụng cho loại của chúng và được đặt trong các phần có tên tương ứng. Một số loại unit như device, target, snapshotscope không có chỉ thị riêng, do đó không có phần đặc thù cho chúng.

Phần [Service]

Phần [Service] được dùng để cung cấp cấu hình chỉ áp dụng cho dịch vụ (service). Một trong những thông tin cơ bản cần được chỉ định trong phần này là Type= của dịch vụ. Chỉ thị này phân loại dịch vụ theo cách thức xử lý tiến trình và hành vi daemon hóa, điều này rất quan trọng vì nó cho systemd biết cách quản lý dịch vụ một cách chính xác và xác định trạng thái của nó.

Chỉ thị Type= có thể nhận các giá trị sau:

Một số chỉ thị bổ sung có thể cần thiết cho một số loại dịch vụ nhất định, ví dụ:

Như đã thảo luận, chúng ta đã đề cập một số thông tin cơ bản, nhưng chưa nói đến cách quản lý dịch vụ. Các chỉ thị để quản lý dịch vụ bao gồm:

Phần [Socket]

Các unit socket rất phổ biến trong cấu hình systemd vì nhiều dịch vụ áp dụng cơ chế kích hoạt dựa trên socket để tăng cường khả năng song song và sự linh hoạt. Mỗi unit socket phải có một unit dịch vụ tương ứng sẽ được kích hoạt khi socket nhận được hoạt động.

Bằng cách tách phần điều khiển socket ra khỏi chính dịch vụ, các socket có thể được khởi tạo sớm và các dịch vụ liên quan có thể khởi động song song. Theo mặc định, tên của socket sẽ cố gắng khởi động dịch vụ cùng tên khi có kết nối. Khi dịch vụ được khởi động, socket sẽ được chuyển giao để xử lý các yêu cầu đang chờ.

Các chỉ thị thường dùng để định nghĩa socket bao gồm:

Các chỉ thị bổ sung để kiểm soát đặc tính của socket:

Phần [Mount]

Các unit mount cho phép quản lý điểm gắn (mount point) từ bên trong systemd. Các điểm gắn được đặt tên dựa trên thư mục mà chúng quản lý, với thuật toán chuyển đổi được áp dụng:

The [Automount] Section

Unit automount cho phép một unit .mount liên quan được tự động gắn khi hệ thống khởi động. Tương tự như unit mount, các unit này phải được đặt tên theo đường dẫn đã được chuyển đổi.

Phần [Automount] khá đơn giản với chỉ có hai tùy chọn:

Phần Automount

Các unit swap được sử dụng để cấu hình không gian swap trên hệ thống. Tên của các unit swap phải phản ánh tệp swap hoặc thiết bị swap, sử dụng cùng thuật toán chuyển đổi hệ thống tập tin như đã nêu ở trên.

Tương tự như các tùy chọn mount, các unit swap có thể được tạo tự động từ các mục trong /etc/fstab hoặc có thể được cấu hình thông qua tệp unit riêng biệt. Phần [Swap] có thể chứa các chỉ thị sau:

Phần [Path]

Một unit path định nghĩa một đường dẫn trên hệ thống tập tin mà systemd có thể theo dõi để phát hiện thay đổi. Một unit khác phải tồn tại và được kích hoạt khi có hoạt động nhất định tại đường dẫn đó. Hoạt động của đường dẫn được xác định thông qua các sự kiện inotify.

Phần [Path] có thể chứa các chỉ thị sau:

Phần [Timer]

Các unit timer được dùng để lên lịch các tác vụ hoạt động vào một thời điểm cụ thể hoặc sau một khoảng thời gian trễ nhất định. Loại unit này thay thế hoặc bổ sung một số chức năng của daemon cron hoặc at. Một unit tương ứng phải được cung cấp và sẽ được kích hoạt khi bộ đếm thời gian đạt đến thời điểm chỉ định.

Phần [Timer] có thể chứa các chỉ thị sau:

Phần [Slice]

Phần [Slice] của một tệp unit thực chất không có cấu hình riêng dành cho unit slice. Thay vào đó, nó có thể chứa các chỉ thị quản lý tài nguyên mà cũng có thể áp dụng cho một số loại unit khác đã đề cập ở trên. Một số chỉ thị phổ biến có thể dùng trong phần [Slice] (và cũng có thể sử dụng ở các phần khác như [Scope], [Service], [Socket], [Mount], [Swap]) được mô tả chi tiết trong trang man systemd.resource-control.

Tạo các đơn vị thể hiện từ các tệp đơn vị mẫu

Ở phần trước, chúng ta đã nhắc đến ý tưởng rằng các tệp unit mẫu (template) có thể được dùng để tạo ra nhiều instance của unit. Trong phần này, chúng ta sẽ đi sâu hơn vào khái niệm đó.

Tên của đơn vị mẫu và đơn vị thể hiện

Các tệp unit mẫu có thể được nhận diện bởi ký hiệu “@” xuất hiện sau tên unit gốc và trước hậu tố kiểu unit. Ví dụ, một tệp unit mẫu có tên:

example@.service

Khi tạo một instance từ tệp mẫu, một định danh instance sẽ được chèn vào giữa ký hiệu “@” và dấu chấm bắt đầu phần hậu tố kiểu unit. Ví dụ, tệp mẫu trên có thể tạo ra một unit instance có tên:

example@instance1.service

Thông thường, một tệp instance được tạo ra dưới dạng liên kết tượng trưng (symbolic link) trỏ về tệp mẫu, với tên liên kết bao gồm định danh instance. Khi quản lý một instance unit, systemd sẽ tìm kiếm một tệp có tên instance chính xác như bạn đã chỉ định. Nếu không tìm thấy, nó sẽ tìm tệp mẫu tương ứng.

Bộ định danh mẫu

Sức mạnh của các tệp unit mẫu chủ yếu được thể hiện qua khả năng thay thế động thông tin phù hợp trong định nghĩa unit theo môi trường hoạt động. Điều này được thực hiện bằng cách đặt các chỉ thị trong tệp mẫu như bình thường, nhưng thay thế một số giá trị hoặc một phần của giá trị bằng các biến ký hiệu (specifier). Một số ký hiệu thông dụng được thay thế khi một instance unit được diễn giải bao gồm:

Bằng cách sử dụng các ký hiệu trên trong tệp mẫu, systemd sẽ tự động điền các giá trị đúng khi diễn giải mẫu để tạo ra một instance unit.

Kết luận

Khi làm việc với systemd, hiểu biết về các unit và tệp unit sẽ giúp công việc quản trị trở nên dễ dàng hơn. Khác với nhiều hệ thống khởi động khác, bạn không cần phải biết một ngôn ngữ lập trình để giải thích các tệp khởi động dùng để khởi động dịch vụ hay hệ thống. Các tệp unit sử dụng cú pháp khai báo khá đơn giản, cho phép bạn nhìn vào nhanh chóng mục đích và tác động của một unit khi được kích hoạt.

Hiểu rõ tệp đơn vị giúp bạn tối ưu hóa hệ thống Linux. Nếu cần môi trường thực hành ổn định, hãy thuê VPS tại DataOnline. Với băng thông không giới hạn và uptime 99,9%, VPS của chúng tôi là giải pháp lý tưởng cho mọi dự án của bạn!

Việc tách rời logic kích hoạt thành các unit riêng biệt không chỉ giúp các tiến trình nội bộ của systemd tối ưu hóa việc khởi động song song, mà còn giữ cho cấu hình trở nên đơn giản và cho phép bạn sửa đổi, khởi động lại một số unit mà không cần phá vỡ hay tái tạo lại các kết nối liên quan. Việc tận dụng các khả năng này sẽ mang lại cho bạn sự linh hoạt và sức mạnh lớn hơn trong công tác quản trị.

Exit mobile version