Hướng Dẫn Quản Lý Dịch Vụ Linux Với systemctl: Cách Hiển Thị Danh Sách, Khởi Động, Và Xử Lý Sự Cố

目次

1. Giới thiệu

Khi sử dụng Linux, bạn sẽ thường gặp những tình huống như “muốn kiểm tra trạng thái dịch vụ” hoặc “muốn xem danh sách các tiến trình đang chạy”. Trong những lúc như vậy, lệnh systemctl sẽ rất hữu ích.

Lệnh này hỗ trợ “systemd” – hệ thống khởi động và trình quản lý dịch vụ trên Linux – cho phép bạn kiểm tra trạng thái, khởi động, dừng, khởi động lại, cũng như liệt kê danh sách các dịch vụ (unit) một cách đa dạng.

Đặc biệt, từ góc nhìn “danh sách systemctl”, bạn có thể nắm được tổng thể hệ thống không chỉ với các dịch vụ đang chạy mà còn cả các dịch vụ đã tắt, hoặc các dịch vụ đã được thiết lập tự động khởi động.

Ở chương này, chúng ta sẽ tóm tắt ngắn gọn về “systemctl là gì” và giải thích bạn sẽ học được gì từ bài viết này.

Systemctl là gì?

systemctl là công cụ chuẩn để quản lý và kiểm tra các “unit” như dịch vụ, target, mount point… trên các bản phân phối Linux dựa trên systemd.

Ví dụ, bạn có thể sử dụng nó để khởi động/dừng dịch vụ như Apache (httpd), SSH, hoặc xem trạng thái của các dịch vụ đó.

Mối quan hệ giữa systemd và systemctl

systemd là thành phần cốt lõi quản lý tiến trình khởi động và dịch vụ của Linux, thay thế các hệ thống cũ như “SysVinit” hoặc “Upstart”. Công cụ dòng lệnh để tương tác với systemd chính là systemctl.

Nói cách khác, nếu ví systemd như “bộ chỉ huy”, thì systemctl là “người vận hành” thực hiện các lệnh quản lý đó.

Những gì bạn sẽ học được từ bài viết này

Bài viết này sẽ giải đáp các thắc mắc sau:

  • Làm thế nào để xem danh sách các dịch vụ đang chạy hiện tại?
  • Làm sao để liệt kê cả các dịch vụ không hoạt động?
  • Cách kiểm tra dịch vụ nào được thiết lập tự động khởi động?
  • Cách đọc và hiểu kết quả liệt kê?

Bài viết cũng sẽ giải thích chi tiết cách chạy lệnh và cách đọc kết quả đầu ra, để ngay cả người mới dùng Linux cũng có thể dễ dàng nắm bắt.

2. Cách hiển thị danh sách dịch vụ với systemctl

Trong quản trị hệ thống Linux, việc nhanh chóng nắm bắt danh sách các dịch vụ là rất quan trọng. Với lệnh systemctl, bạn có thể dễ dàng kiểm tra cả dịch vụ đang hoạt động, không hoạt động và trạng thái tự động khởi động.

Sau đây là ba cách chính để liệt kê dịch vụ:

  • Danh sách dịch vụ đang hoạt động
  • Danh sách tất cả dịch vụ (bao gồm cả không hoạt động)
  • Danh sách file unit dịch vụ (bao gồm trạng thái thiết lập khởi động)

2.1 Hiển thị danh sách dịch vụ đang hoạt động

Cách cơ bản nhất để kiểm tra các dịch vụ “đang chạy” trên hệ thống là sử dụng lệnh sau:

systemctl list-units --type=service

Khi thực hiện lệnh này, bạn sẽ thấy danh sách các dịch vụ đang hoạt động (active). Kết quả gồm các mục sau:

Tên mụcÝ nghĩa
UNITTên dịch vụ (ví dụ: ssh.service)
LOADĐã load file unit hay chưa
ACTIVETrạng thái hoạt động của dịch vụ (ví dụ: active, inactive, failed)
SUBTrạng thái chi tiết hơn (ví dụ: running, exited, dead)
DESCRIPTIONMô tả dịch vụ

Dựa vào đây, bạn có thể dễ dàng kiểm tra “nginx có đang chạy không?” hoặc “dịch vụ nào đang hoạt động?”.

2.2 Hiển thị cả dịch vụ không hoạt động

Lưu ý: list-units mặc định chỉ hiển thị dịch vụ đang hoạt động. Nếu muốn kiểm tra cả các dịch vụ không hoạt động, hãy thêm tuỳ chọn --all:

systemctl list-units --type=service --all

Nhờ đó, các dịch vụ ở trạng thái “inactive” hoặc chưa từng khởi động cũng được liệt kê.

Nếu muốn lọc theo trạng thái nhất định, dùng thêm --state= như sau:

systemctl list-units --type=service --state=inactive

Cách này giúp bạn kiểm tra linh hoạt, ví dụ chỉ xem các dịch vụ đang dừng.

2.3 Kiểm tra danh sách file unit của dịch vụ

Nếu muốn kiểm tra dịch vụ nào được kích hoạt hoặc sẽ tự động khởi động lúc boot, hãy dùng lệnh sau:

systemctl list-unit-files --type=service

Lệnh này sẽ hiển thị danh sách các file unit dịch vụ và trạng thái được bật/tắt (enabled/disabled…) của chúng.

Giá trị STATEÝ nghĩa
enabledĐược tự động kích hoạt khi khởi động hệ thống
disabledKhông tự động, phải khởi động thủ công
staticChỉ chạy phụ thuộc vào unit khác, không tự thiết lập bật/tắt được
maskedBị vô hiệu hóa hoàn toàn, không thể khởi động (bị bảo vệ)

Nhờ danh sách này, bạn có thể dễ dàng kiểm tra “dịch vụ nào sẽ tự động khởi động?” hay “có dịch vụ nào bị masked không?”.

3. Các thao tác quản lý dịch vụ cơ bản với systemctl

Lệnh systemctl không chỉ kiểm tra trạng thái mà còn hỗ trợ khởi động, dừng, khởi động lại dịch vụ, cài đặt tự động khởi động… rất tiện lợi. Sau đây là các thao tác cơ bản thường dùng trong quản trị Linux.

Thành thạo những thao tác này sẽ giúp quản lý server và xử lý sự cố hàng ngày hiệu quả hơn.

3.1 Khởi động dịch vụ

Để khởi động một dịch vụ thủ công, hãy dùng lệnh sau với subcommand start:

sudo systemctl start tên-dịch-vụ

Ví dụ, để khởi động Apache (httpd):

sudo systemctl start httpd.service

Lệnh này sẽ khởi động dịch vụ ngay. Nếu muốn tự động chạy sau khi khởi động lại hệ thống, cần thiết lập enable (xem phía sau).

3.2 Dừng dịch vụ

Để dừng dịch vụ, hãy sử dụng lệnh sau:

sudo systemctl stop tên-dịch-vụ

Ví dụ:

sudo systemctl stop sshd.service

Dịch vụ sẽ không hoạt động cho đến khi bạn start lại.

3.3 Khởi động lại dịch vụ

Nếu bạn cần khởi động lại dịch vụ (ví dụ sau khi thay đổi cấu hình):

sudo systemctl restart tên-dịch-vụ

Ví dụ:

sudo systemctl restart nginx.service

Lệnh này sẽ dừng và khởi động lại dịch vụ, bất kể trạng thái hiện tại.

3.4 Kiểm tra trạng thái dịch vụ

Để kiểm tra chi tiết trạng thái của dịch vụ, dùng subcommand status:

systemctl status tên-dịch-vụ

Ví dụ:

systemctl status mysql.service

Lệnh này cho biết trạng thái hoạt động, PID, tóm tắt log… rất hữu ích khi xử lý sự cố.

3.5 Bật tự động khởi động dịch vụ

Để dịch vụ tự động khởi động sau mỗi lần reboot, dùng subcommand enable:

sudo systemctl enable tên-dịch-vụ

Ví dụ:

sudo systemctl enable docker.service

Như vậy, dịch vụ sẽ tự chạy mỗi khi khởi động hệ thống.

3.6 Tắt tự động khởi động dịch vụ

Nếu muốn tắt tự động khởi động, hãy dùng lệnh sau:

sudo systemctl disable tên-dịch-vụ

Ví dụ:

sudo systemctl disable cups.service

Kể từ lần sau khởi động, dịch vụ sẽ không tự động chạy nữa.

3.7 Kiểm tra trạng thái bật/tắt tự động

Để kiểm tra dịch vụ đã được enable hay disable:

systemctl is-enabled tên-dịch-vụ

Kết quả ví dụ:

enabled

Nhờ đó, bạn nhanh chóng xác nhận chính sách khởi động của dịch vụ.

4. Các tuỳ chọn hữu ích và kỹ thuật nâng cao với systemctl

Lệnh systemctl không chỉ hỗ trợ thao tác cơ bản như khởi động hay dừng dịch vụ mà còn có nhiều chức năng quản trị nâng cao giúp công việc quản lý dịch vụ Linux hiệu quả hơn. Dưới đây là một số tuỳ chọn và mẹo hữu ích nên biết.

Khai thác tốt những kỹ thuật này sẽ giúp bạn quản lý hệ thống Linux tối ưu hơn.

4.1 Hiển thị danh sách phụ thuộc của dịch vụ

Trong Linux, một số dịch vụ có thể phụ thuộc vào các unit khác (dịch vụ, mount, target, v.v). Để kiểm tra mối quan hệ phụ thuộc này, sử dụng lệnh list-dependencies như sau:

systemctl list-dependencies tên-dịch-vụ

Ví dụ:

systemctl list-dependencies nginx.service

Lệnh này sẽ hiển thị các unit liên quan đến dịch vụ được chỉ định theo dạng cây phân cấp. Hữu ích khi bạn muốn kiểm tra thứ tự khởi động hoặc ảnh hưởng chéo giữa các unit.

4.2 Hiển thị nội dung file unit

Nếu bạn muốn kiểm tra chi tiết thiết lập của một dịch vụ, bạn có thể xem trực tiếp nội dung file unit (.service) với lệnh sau:

systemctl cat tên-dịch-vụ

Ví dụ:

systemctl cat ssh.service

Lệnh này sẽ hiển thị đường dẫn và nội dung của file unit đang được sử dụng, giúp bạn nhanh chóng xác định các tuỳ chỉnh hay thiết lập cấu hình.

4.3 Tải lại file unit (reload)

Sau khi chỉnh sửa file unit, để systemctl nhận biết thay đổi đó, bạn cần chạy lệnh daemon-reload:

sudo systemctl daemon-reexec

Hoặc phổ biến hơn là:

sudo systemctl daemon-reload

Lệnh này sẽ tải lại các file unit. Nếu bạn thay đổi cấu hình mà chưa thấy có hiệu lực, hãy thử reload trước khi khởi động lại dịch vụ.

4.4 Xem nhật ký hoạt động của unit (bổ sung)

Dù không phải trực tiếp của systemctl, nhưng để kiểm tra log dịch vụ, bạn nên dùng lệnh journalctl:

journalctl -u tên-dịch-vụ

Ví dụ:

journalctl -u docker.service

Lệnh này rất hữu ích để kiểm tra lỗi khởi động, lịch sử hoạt động của dịch vụ, đặc biệt khi cần xử lý sự cố.

5. Những lỗi thường gặp và cách khắc phục

Khi quản lý dịch vụ với systemctl, đôi khi bạn sẽ gặp trường hợp dịch vụ không hoạt động đúng ý hoặc xuất hiện thông báo lỗi. Dưới đây là các lỗi thường gặp và cách xử lý nhanh chóng, dễ hiểu.

Nắm rõ các điểm cơ bản này sẽ giúp bạn bình tĩnh giải quyết khi gặp sự cố như “dịch vụ không khởi động được”, “không biết lý do dịch vụ dừng”…

5.1 Các bước kiểm tra khi dịch vụ không khởi động

Khi khởi động dịch vụ mà xuất hiện lỗi như sau:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Hãy kiểm tra lần lượt theo thứ tự dưới đây để dễ xác định nguyên nhân:

  1. Kiểm tra trạng thái
   systemctl status tên-dịch-vụ
  1. Kiểm tra log lỗi
   journalctl -xe
  1. Tải lại file unit
    Sau khi sửa file unit, hãy reload như sau:
   sudo systemctl daemon-reload
  1. Kiểm tra xung đột cổng
    Xem có dịch vụ nào khác đã sử dụng cổng chưa:
   sudo netstat -tulnp | grep số-cổng

5.2 Cách đọc thông báo lỗi từ lệnh status

Khi chạy systemctl status, bạn sẽ thấy không chỉ trạng thái dịch vụ mà còn dòng log cuối cùng. Ví dụ:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
  Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)

Nhìn dòng “Active: failed” hay “status=1/FAILURE” là biết dịch vụ bị lỗi, và dòng Loaded cho biết đường dẫn file unit.

5.3 Dịch vụ tự động dừng sau khi khởi động

Nếu dịch vụ khởi động nhưng ngay lập tức dừng, thường có các nguyên nhân sau:

  • Lỗi cấu hình file
  • Xung đột cổng
  • Thiếu file hoặc thư mục cần thiết
  • Thiếu quyền thực thi

Khắc phục bằng cách:

  • Kiểm tra lại cấu hình với nginx -t hoặc apachectl configtest
  • Kiểm tra log chi tiết bằng journalctl -u tên-dịch-vụ
  • Kiểm tra thư mục cần thiết đã tồn tại chưa (vd: /var/run/xxx), nếu chưa hãy tạo mới

5.4 Khi dịch vụ ở trạng thái masked không thể khởi động

Nếu gặp lỗi như sau khi chạy systemctl start:

Failed to start example.service: Unit example.service is masked.

Có nghĩa là dịch vụ đang ở trạng thái masked (vô hiệu hoá hoàn toàn). Để gỡ trạng thái này, hãy dùng:

sudo systemctl unmask tên-dịch-vụ

Sau đó bạn có thể khởi động lại dịch vụ như thường.

6. Tổng kết

Quản lý dịch vụ trên Linux là một phần không thể thiếu khi vận hành hệ thống. Lệnh systemctl đóng vai trò trung tâm cho việc kiểm tra, quản lý dịch vụ và giúp bạn kiểm soát toàn diện tình trạng hệ thống thông qua các thao tác như liệt kê, bật/tắt dịch vụ.

Bài viết này đã giải thích chi tiết về các thao tác với “systemctl danh sách”, tập trung vào các điểm sau:

Tóm tắt những gì systemctl có thể làm

  • Kiểm tra danh sách dịch vụ
  • Hiển thị dịch vụ đang hoạt động (list-units --type=service)
  • Hiển thị cả dịch vụ không hoạt động (--all hoặc --state=)
  • Danh sách file unit dịch vụ và trạng thái bật/tắt (list-unit-files)
  • Các thao tác cơ bản với dịch vụ
  • Khởi động, dừng, khởi động lại, kiểm tra trạng thái (start / stop / restart / status)
  • Thiết lập tự động khởi động (enable / disable / is-enabled)
  • Kỹ thuật nâng cao & xử lý sự cố
  • Kiểm tra phụ thuộc, xem nội dung file unit, reload cài đặt
  • Kiểm tra log, xác định nguyên nhân khi gặp lỗi

Best practice khi quản lý dịch vụ

  • Luôn kiểm tra trạng thái trước khi thao tác (status)
  • Kiểm tra trạng thái tự động khởi động bằng is-enabled
  • Sau khi chỉnh sửa file unit nhớ reload (daemon-reload)
  • Khi gặp sự cố hãy kiểm tra log với journalctl

Việc kiểm tra kỹ lưỡng và thao tác chuẩn xác là chìa khoá giúp hệ thống Linux vận hành ổn định và dễ xử lý sự cố.

Học nâng cao thêm

Nếu bạn muốn tìm hiểu sâu hơn, hãy tham khảo thêm các chủ đề sau:

  • systemd target (khác biệt với runlevel)
  • Thiết lập tác vụ định kỳ bằng systemd-timer
  • Tạo và cấu hình file unit tuỳ chỉnh

7. Câu hỏi thường gặp (FAQ)

Dưới đây là một số câu hỏi phổ biến liên quan đến lệnh systemctl và việc quản lý danh sách dịch vụ. Bạn có thể tham khảo để củng cố kiến thức.

Q1. Khác biệt giữa systemctlservice?

A1.
systemctl là công cụ quản lý dịch vụ chuẩn cho hệ thống dựa trên systemd, hiện được hầu hết các bản phân phối Linux hiện đại (Ubuntu, CentOS, Fedora…) sử dụng.
Ngược lại, service là lệnh dùng cho hệ thống SysVinit truyền thống, vẫn còn để tương thích. Tuy nhiên, trên các hệ thống dùng systemd, nên sử dụng systemctl.

Q2. Sự khác biệt giữa list-unitslist-unit-files?

A2.

  • list-units hiển thị các unit đã được load hiện tại (đang chạy hoặc đã từng sử dụng).
  • list-unit-files liệt kê toàn bộ file unit và trạng thái (enabled / disabled…) của chúng.
    Nói cách khác, “cái gì đang chạy” và “cấu hình đã thiết lập” là hai phạm vi khác nhau.

Q3. Có thể khởi động dịch vụ trạng thái static không?

A3.
Có, dịch vụ ở trạng thái static vẫn có thể khởi động thủ công bằng lệnh start. Tuy nhiên, không thể thiết lập tự động khởi động với enable, vì loại này chỉ chạy khi được unit khác gọi.

Q4. Dịch vụ bị masked không khởi động được phải làm sao?

A4.
Trạng thái masked là “vô hiệu hóa hoàn toàn”, dịch vụ sẽ không thể khởi động cho tới khi bạn bỏ mask với lệnh:

sudo systemctl unmask tên-dịch-vụ

Sau đó có thể start dịch vụ bình thường.

Q5. Có thể xem danh sách dịch vụ bằng giao diện đồ hoạ không?

A5.
Một số bản phân phối Linux hỗ trợ các công cụ GUI như gnome-system-monitor, KSysGuard, hoặc Cockpit để quản lý dịch vụ.
Tuy nhiên, để thao tác sâu và kiểm soát tối đa, bạn nên sử dụng lệnh systemctl trên dòng lệnh.

Q6. Nếu muốn tự tạo file unit, nên lưu ở đâu?

A6.
Thông thường bạn nên lưu tại /etc/systemd/system/. Sau khi chỉnh sửa, đừng quên reload bằng lệnh:

sudo systemctl daemon-reload

Sau đó bạn có thể quản lý dịch vụ với start hoặc enable như bình thường.

侍エンジニア塾