Cách liệt kê các dịch vụ Linux với systemctl

Tác giả sysadmin, T.Tám 20, 2023, 11:58:00 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách liệt kê các dịch vụ Linux với systemctl


Nhận thông tin sốt dẻo bên trong về các dịch vụ và daemon.

  • Sử dụng "systemctl --type=service --state=running" để xem tất cả các dịch vụ đang chạy trên hệ thống Linux với systemd. Nó cung cấp các chi tiết như tên, tải trọng, trạng thái phụ và mô tả.
  • Systemd là trình quản lý hệ thống và dịch vụ trong Linux khởi chạy các dịch vụ. Dịch vụ là các tác vụ nền không có giao diện người dùng, trong khi daemon được khởi chạy khi khởi động.
  • Hầu hết các bản phân phối Linux sử dụng systemd, nhưng có những lựa chọn thay thế như runit hoặc s6-linux-init. Sử dụng "pstree | head -5" để kiểm tra xem hệ thống có dựa trên systemd hay không.


Để xem tất cả các dịch vụ đang chạy trên hệ thống Linux với systemd, hãy sử dụng lệnh "systemctl --type=service --state=running". Điều này sẽ hiển thị cho bạn tên, tải, phụ của từng dịch vụ đang hoạt động -Nêu và miêu tả. Bạn cũng có thể thay đổi giá trị trạng thái để xem các dịch vụ đã ngừng hoạt động, đã thoát, bị lỗi hoặc không hoạt động.**

Máy tính Linux của bạn phụ thuộc vào rất nhiều tác vụ nền được gọi là dịch vụ hoặc daemon. Trên các bản phân phối dựa trên systemd, bạn có các lệnh tích hợp cho phép bạn xem dịch vụ nào đang chạy, bị vô hiệu hóa hoặc bị lỗi.

1. Dịch vụ và Daemon

Dịch vụ và daemon là các tác vụ nền chạy không có giao diện người dùng, không yêu cầu tương tác của con người và thường được bắt đầu khi máy tính khởi động.

Tại một thời điểm, các dịch vụ đã được khởi chạy bởi init, đây là quy trình đầu tiên được khởi chạy. Thông tin chi tiết về các dịch vụ được lưu giữ trong một tập hợp các tập lệnh nằm trong thư mục "/etc/init/d". Trên các bản phân phối không thuộc hệ thống vẫn như vậy.

Trong thế giới systemd, các dịch vụ được khởi chạy theo systemdđó là quy trình đầu tiên được khởi chạy. Chi tiết của các dịch vụ được lưu trữ trong các tệp đơn vị nằm trong thư mục "/usr/lib/systemd".

Theo trang người đàn ông của nó, systemdlà một người quản lý hệ thống và dịch vụ. Bạn có thể sử dụng systemctllệnh để kiểm tra và kiểm soát các khía cạnh khác nhau của hệ thống systemd, bao gồm các dịch vụ và daemon.

Bởi vì ở đây chúng ta đang xem xét các lệnh dành riêng cho systemd nên điều đầu tiên bạn cần biết là bạn có đang chạy bản phân phối dựa trên systemd hay không.

2. init hoặc dựa trên systemd?

Phần lớn các bản phân phối Linux sử dụng systemd, bao gồm Arch, Red Hat và Debian, và nhiều bản phân phối bắt nguồn từ chúng. Điều đó bao gồm họ phân phối Ubuntu, Fedora và các spin của nó, Manjaro và các bản phân phối dựa trên Arch khác.

Tuy nhiên, có những nhánh hoặc hương vị của một số bản phân phối này đã được tạo riêng để tránh phải sử dụng systemd. Không chỉ vậy, còn có các hệ thống init khác mà ai đó có thể chọn sử dụng thay vì hệ thống được mặc định trong bản phân phối của họ, chẳng hạn như runit hoặc s6-linux-init.

Nếu bạn phải quản trị một máy tính Linux mà bạn không tự thiết lập, thì cách duy nhất để chắc chắn liệu nó có đang sử dụng systemd hay không, là kiểm tra. Chúng ta có thể làm điều đó bằng cách xem cây quy trình bằng pstreelệnh. Chúng ta chỉ cần nhìn thấy phần trên cùng của cây---rốt cuộc thì chúng ta đang tìm kiếm quy trình đầu tiên chạy---vì vậy chúng ta sẽ chuyển đầu ra thông qua lệnh headvà yêu cầu năm mục nhập đầu tiên.

Mã nguồn [Chọn]
pstree | head -5

Chúng ta có thể thấy đó systemd là quy trình đầu tiên được chạy sau khi khởi động, vì vậy chúng ta chắc chắn đang cài đặt Linux dựa trên systemd.

3. Sử dụng systemctl để liệt kê các dịch vụ

Lệnh liệt kê các dịch vụ và daemon là systemctl. Chúng ta có thể tinh chỉnh systemctllệnh với các tùy chọn typevà state. Chúng tôi yêu cầu systemctlbáo cáo về các dịch vụ đang ở trạng thái đang hoạt động.

Mã nguồn [Chọn]
systemctl --type=service --state=running
Một bảng thông tin được tạo ra. Nếu nó quá rộng hoặc dài đối với cửa sổ đầu cuối của bạn, nó sẽ được hiển thị trong trình xem tệp mặc định của bạn, có khả năng là tệp less.


Để xem phần cuối bên phải của bảng, hãy nhấn phím Mũi tên phải. Để quay lại dạng xem thông thường, nhấn phím Mũi tên trái.


Nhấn phím Q để thoát khỏi less. Các cột được hiển thị là:

  • Unit : Tên của dịch vụ hoặc daemon. Cột này có tiêu đề là "Đơn vị" vì bất kỳ nội dung nào trong cột này đã được khởi chạy bằng cách sử dụng thông tin systemdtìm thấy trong tệp đơn vị.
  • Load : Trạng thái tải của dịch vụ hoặc daemon. Nó có thể được tải, không tìm thấy, cài đặt sai, lỗi hoặc bị che.
  • Đang hoạt động : Trạng thái tổng thể của dịch vụ hoặc daemon. Nó có thể đang hoạt động, đang tải lại, không hoạt động, không thành công, kích hoạt hoặc hủy kích hoạt.
  • SUB : Trạng thái con của dịch vụ hoặc daemon. Nó có thể chết, thoát, lỗi, không hoạt động hoặc đang chạy.
  • Mô tả : Mô tả ngắn về thiết bị.

Chúng tôi có thể chuyển đầu ra systemctlthông qua grepnếu chúng tôi muốn tập trung vào một dịch vụ duy nhất. Lệnh này cô lập mục nhập bảng cho ssh dịch vụ.

Mã nguồn [Chọn]
systemctl --type=service --state=running | grep ssh

Cho đến nay, chúng tôi đã lọc nội dung của bảng bằng cách cung cấp tùy state=runningchọn. Thay vào đó, chúng ta có thể sử dụng bất kỳ giá trị nào có thể có của trạng thái con: đã chết, đã thoát, không thành công, không hoạt động hoặc đang chạy.

Hãy tìm kiếm các dịch vụ bị lỗi:

Mã nguồn [Chọn]
systemctl --type=service --state=failed

Sự kết hợp của các trạng thái phụ có thể được sử dụng. Nhập chúng dưới dạng danh sách được phân tách bằng dấu phẩy. Đảm bảo rằng bạn không bao gồm bất kỳ khoảng trắng nào giữa các tùy chọn. Lưu ý rằng điều này tìm thấy các dịch vụ phù hợp với một trong hai trạng thái.

Mã nguồn [Chọn]
systemctl --type=service --state=failed,exited
Nhấn phím Mũi tên phải để xem các cột ngoài màn hình cho thấy chúng tôi có hỗn hợp các dịch vụ đã thoát và bị lỗi trong danh sách.


Theo mặc định, systemctlliệt kê các quy trình---dịch vụ và daemon---đã được khởi chạy bởi systemdvì systemdđã tìm thấy tệp đơn vị chứa tệp đơn vị hợp lệ cho chúng. Đó là lý do tại sao thuật ngữ viết tắt cho tất cả quá trình này là "đơn vị".

Có một tùy chọn để yêu cầu systemctlliệt kê các đơn vị một cách rõ ràng, nhưng vì đây là hành động mặc định nên nó không thường được sử dụng.

Các lệnh này tạo ra kết quả tương tự.

Mã nguồn [Chọn]
sudo systemctl list-units --type=service --state=running
Mã nguồn [Chọn]
sudo systemctl --type=service --state=running
4. Sử dụng systemctl để liệt kê các tệp đơn vị

Chúng tôi có thể mở rộng phạm vi của systemctllệnh bằng cách bao gồm list-unit-filestùy chọn. Điều này không chỉ báo cáo về các dịch vụ và daemon đã được khởi chạy, nó còn liệt kê tất cả các tệp đơn vị được cài đặt trên máy tính của bạn.

Mã nguồn [Chọn]
systemctl list-unit-files --state=enabled
Một bảng màu được hiển thị.


Xóa state tùy chọn sẽ xóa bộ lọc. Đầu ra sẽ chứa tất cả các tệp đơn vị đã cài đặt, bất kể trạng thái của chúng.

Mã nguồn [Chọn]
systemctl list-unit-files
Đầu ra sẽ chứa nhiều mục hơn so với kết quả từ các lệnh trước đó.


Trên máy tính thử nghiệm của chúng tôi, danh sách kết quả dài hơn gần bốn lần so với đầu ra của các lệnh trước đây của chúng tôi.

Nếu bạn muốn sử dụng statetùy chọn này, bạn có thể sử dụng nhiều trạng thái với nó như chúng ta đã thấy trước đó. Các quy tắc tương tự được áp dụng. Cung cấp các tùy chọn dưới dạng các giá trị được phân tách bằng dấu phẩy và không bao gồm bất kỳ khoảng trắng nào.

Lệnh này sẽ liệt kê tất cả các tệp đơn vị bị vô hiệu hóa hoặc không khởi chạy được.

Mã nguồn [Chọn]
systemctl list-unit-files --state=enabled,failed
Số lượng kết quả giảm được hiển thị, được lọc theo các lựa chọn bạn đã thực hiện với tùy chọn trạng thái.


5. Nhìn vào một dịch vụ chi tiết

Nếu điều gì đó về một dịch vụ hoặc trình nền thu hút sự quan tâm của bạn và xứng đáng được tìm hiểu sâu hơn, bạn có thể xem xét chi tiết điều đó bằng cách sử dụng tùy chọn trạng thái systemctl.

Chúng ta hãy xem daemon SSH, sshd. Tất cả những gì chúng ta cần làm là sử dụng tùy chọn trạng thái và tên của dịch vụ hoặc daemon.

Mã nguồn [Chọn]
systemctl status sshd

Màn hình nhỏ gọn này hiển thị:

  • Tên của dịch vụ cùng với một mô tả ngắn. Một dấu chấm được mã hóa màu cho biết nó có đang chạy hay không. Màu xanh lá cây có nghĩa là nó đang chạy, màu đỏ có nghĩa là nó không hoạt động.
  • Nội dung đã được tải, bao gồm đường dẫn đến tệp đơn vị.
  • Nó đã chạy bao lâu rồi.
  • Tài liệu nằm ở đâu trong mansách hướng dẫn.
  • ID tiến trình của phiên bản đang chạy.
  • Có bao nhiêu phiên bản đồng thời của dịch vụ này đang chạy. Thông thường đây sẽ là một.
  • Bao nhiêu bộ nhớ đang được tiêu thụ.
  • Bao nhiêu thời gian CPU đã được tiêu thụ.
  • Nhóm kiểm soát mà dịch vụ thuộc về.

Các mục có liên quan từ nhật ký hệ thống cũng được hiển thị. Đây thường là các sự kiện như khởi động dịch vụ. Đây có thể là thông tin hữu ích nếu bạn đang xem xét một dịch vụ hoặc trình nền không khởi chạy chính xác.

6. Các hệ thống tự trị

Các dịch vụ và daemon cung cấp nhiều hành động tự động cho hệ điều hành của bạn, vì vậy chúng rất quan trọng. Điều đó có nghĩa là sức khỏe của họ cũng rất quan trọng.

Việc xem các dịch vụ, daemon và tệp đơn vị của bạn thật dễ dàng và nhiều thông tin. Đây cũng là một bước khắc phục sự cố có giá trị nếu một dịch vụ hoặc trình nền từ chối khởi động.