Lệnh systemctl trong Linux — Quản lý các dịch vụ hệ thống

Bạn đã bao giờ rơi vào tình huống đang quản lý một hệ thống VPS quan trọng thì bỗng nhiên một dịch vụ web bỗng dưng "đứng hình" mà không rõ lý do chưa nhỉ? Với tư cách là một Senior System Admin, mình đã từng phải thức trắng đêm chỉ để kiểm soát xem các tiến trình chạy ngầm có đang hoạt động ổn định hay không. Đó chính là lúc bạn cần đến sức mạnh của systemctl Linux để giải quyết vấn đề. Vậy thực chất systemctl là gì và làm sao để làm chủ nó một cách chuyên nghiệp nhất? Trong bài viết này, mình sẽ đồng hành cùng bạn để tìm hiểu chi tiết về cách dùng systemctl, giúp bạn nắm vững cách quản lý dịch vụ và cách khởi động lại dịch vụ trên hệ thống một cách vô cùng nhanh chóng. Tất nhiên, việc hiểu rõ công cụ này sẽ giúp bạn kiểm soát mọi dịch vụ trên máy chủ một cách cực kỳ tự tin, đúng không nào?

Cần chuẩn bị gì trước khi dùng lệnh systemctl?

  • Quyền người dùng: Yêu cầu quyền root hoặc sử dụng tiền tố sudo để thực hiện các thao tác thay đổi trạng thái dịch vụ.
  • Hệ điều hành hỗ trợ: Các bản phân phối Linux sử dụng trình quản lý hệ thống systemd như Ubuntu, Debian, CentOS, Fedora, RHEL và Arch Linux.
  • Package dependencies: Cần đảm bảo gói systemd đã được cài đặt sẵn trên hệ thống.

Cú pháp lệnh systemctl là gì?

Lệnh systemctl hỗ trợ nhiều dạng cú pháp khác nhau để quản lý các đơn vị (units) trên hệ thống Linux sử dụng systemd.

systemctl [OPTIONS] COMMAND UNIT...
systemctl COMMAND [OPTIONS] UNIT...

Các tùy chọn thường dùng của lệnh systemctl là gì?

Lệnh systemctl cung cấp nhiều tùy chọn để quản lý các dịch vụ hệ thống, điều khiển trạng thái unit và cấu hình systemd.

Tùy chọn ngắn Tùy chọn dài Mô tả
-t --type= systemctl -t service hiển thị các unit thuộc loại được chỉ định, chẳng hạn service, socket, timer, mount.
-a --all systemctl -a liệt kê tất cả các unit, bao gồm cả những unit không hoạt động hoặc bị vô hiệu hóa.
-l --full systemctl -l hiển thị đầy đủ thông tin unit mà không cắt ngắn.
--no-pager systemctl --no-pager không sử dụng trình xem trang (pager) để hiển thị kết quả.
-q --quiet systemctl -q start service thực hiện lệnh mà không hiển thị thông tin chi tiết.
--no-block systemctl --no-block start service không chờ hoàn tất hoạt động, trả về kết quả ngay lập tức.
-H --host= systemctl -H user@host kết nối và quản lý systemd trên máy chủ từ xa thông qua SSH.
-M --machine= systemctl -M container_name quản lý systemd bên trong một container hoặc máy ảo.
--now systemctl enable --now service kích hoạt unit và bắt đầu ngay trong một lệnh.
--force systemctl --force start service buộc thực hiện hành động mà không kiểm tra điều kiện.
--runtime systemctl --runtime enable service áp dụng thay đổi chỉ cho phiên làm việc hiện tại, không lưu vào đĩa.
-n --lines= systemctl -n 50 status service hiển thị số dòng log được chỉ định khi xem trạng thái.
-o --output= systemctl -o json status service định dạng đầu ra theo kiểu được chỉ định như json, verbose, cat.
--failed systemctl --failed hiển thị danh sách các unit có trạng thái lỗi.
--state= systemctl --state=running lọc các unit theo trạng thái như running, stopped, enabled, disabled.

xem thêm: System Configuration and Settings

Sử dụng lệnh systemctl trong quản lý dịch vụ như thế nào?

Dưới đây là các kịch bản thực tế mà quản trị viên hệ thống thường xuyên thực hiện khi vận hành dịch vụ trên môi trường Linux.

systemctl là gì? [Kiểm tra trạng thái dịch vụ]

systemctl status nginx
● nginx.service - A high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-10-23 10:00:00 UTC; 1h ago

Lệnh này hiển thị trạng thái hoạt động, mã lỗi và các log gần nhất của dịch vụ. Trong thực tế, đây là bước đầu tiên để chẩn đoán nhanh một dịch vụ có đang chạy hay không.

systemctl stop và start là gì? [Khởi động lại dịch vụ]

sudo systemctl stop apache2
sudo systemctl start apache2

Lệnh dùng để dừng và chạy lại một dịch vụ cụ thể. Trên môi trường production, việc sử dụng stop và start riêng biệt thường được dùng khi cần thực hiện các thao tác bảo trì cấu hình tạm thời.

systemctl enable là gì? [Tự động chạy khi khởi động]

sudo systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.

Lệnh thiết lập dịch vụ tự động khởi động cùng hệ thống sau khi reboot. Đây là thao tác bắt buộc khi deploy các dịch vụ quan trọng như database hoặc web server để đảm bảo tính sẵn sàng cao.

systemctl restart là gì? [Áp dụng thay đổi cấu hình]

sudo systemctl restart ssh

Lệnh dừng hoàn toàn và khởi động lại dịch vụ ngay lập tức. Trong thực tế, sysadmin sử dụng lệnh này sau khi thay đổi file cấu hình để các thiết lập mới có hiệu lực.

systemctl daemon-reload là gì? [Cập nhật file unit mới]

sudo systemctl daemon-reload

Lệnh buộc systemd quét lại toàn bộ các file cấu hình dịch vụ (.service). Khi bạn chỉnh sửa trực tiếp các file trong /etc/systemd/system/, việc chạy lệnh này là bắt buộc để hệ thống nhận diện thay đổi.

systemctl list-units là gì? [Liệt kê các dịch vụ đang chạy]

systemctl list-units --type=service --state=running
  UNIT               LOAD    ACTIVE SUB       DESCRIPTION
  ssh.service        loaded  active  running   OpenBSD Secure Shell server
  nginx.service      loaded  active  running   A high performance web server

Lệnh liệt kê danh sách các đơn vị dịch vụ đang ở trạng thái hoạt động. Trong các kịch bản automation hoặc script giám sát, lệnh này giúp kiểm tra nhanh danh sách các service đang chiếm dụng tài nguyên hệ thống.

Lệnh systemctl gặp lỗi không thể quản lý service thì phải xử lý thế nào?

Trong quá trình quản trị hệ thống, bạn có thể gặp phải các lỗi phổ biến khi tương tác với systemd thông qua lệnh systemctl.

Lỗi không có quyền quản trị khi điều khiển service

systemctl restart nginx
Failed to restart nginx.service: Access denied

Lỗi xảy ra do người dùng hiện tại không có quyền root để thay đổi trạng thái của các dịch vụ hệ thống.

Lỗi không tìm thấy unit file được chỉ định

systemctl status my-custom-app
Unit my-custom-app.service could not be found.

Lỗi này xuất hiện khi tên service bị nhập sai hoặc file cấu hình .service chưa được đặt đúng trong thư mục /etc/systemd/system/.

Lỗi không thể load lại cấu hình sau khi chỉnh sửa file service

systemctl start nginx
Job for nginx.service failed because the control process exited with error code.

Lỗi này xảy ra khi bạn thay đổi nội dung file cấu hình nhưng chưa chạy lệnh daemon-reload để systemd cập nhật lại bộ nhớ đệm.

Lỗi dịch vụ thất bại ngay khi vừa khởi động (Failed state)

systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Mon 2023-10-23 10:00:00 UTC; 5s ago
   Main PID: 1234 (code=exited, status=1/FAILURE)

Trạng thái failed cho biết dịch vụ đã được nhận diện nhưng gặp lỗi logic hoặc xung đột cấu hình bên trong khiến tiến trình bị dừng ngay lập tức.

Quy trình thực tế dùng systemctl trong quản trị dịch vụ Linux?

Trong kịch bản triển khai và vận hành một Web Server (như Nginx hoặc Apache), systemctl đóng vai trò trung tâm để điều phối trạng thái hoạt động của các dịch vụ hệ thống.

Bước 1: Kiểm tra trạng thái hiện tại của dịch vụ

systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-10-23 10:00:00 UTC; 1h ago

Lệnh này cho phép bạn xác định dịch vụ đang chạy (active), đã dừng (inactive) hay gặp lỗi (failed) để có hướng xử lý phù hợp.

Bước 2: Khởi động lại dịch vụ sau khi thay đổi cấu hình

sudo systemctl restart nginx

Sau khi chỉnh sửa các file cấu hình hệ thống, việc sử dụng lệnh này giúp áp dụng các thay đổi mới bằng cách dừng và khởi động lại tiến trình dịch vụ.

Bước 3: Thiết lập dịch vụ tự động chạy khi khởi động hệ thống

sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.

Lệnh này cho phép bạn cấu hình dịch vụ tự động khởi chạy cùng hệ điều hành, đảm bảo tính sẵn sàng cao cho server sau khi reboot.

Bước 4: Kiểm tra nhật ký lỗi để khắc phục sự cố

journalctl -u nginx --no-pager
Oct 23 10:15:00 server nginx[1234]: syntax error, unexpected "/" in /etc/nginx/nginx.conf:25

Trong các trường hợp dịch vụ không thể khởi động, lệnh này giúp truy xuất log chi tiết của riêng dịch vụ đó để xác định nguyên nhân gây lỗi.

Việc sử dụng lệnh systemctl trên môi trường VPS đòi hỏi sự chính xác về quyền hạn và trạng thái dịch vụ. Khi quản trị VPS, người dùng thường gặp lỗi thất bại khi thực thi lệnh do thiếu quyền root, dẫn đến thông báo "Access denied". Trường hợp này yêu cầu bổ sung sudo trước lệnh, ví dụ: sudo systemctl restart nginx. Một vấn đề phổ biến khác là sự khác biệt giữa trạng thái "active" và "running". Một dịch vụ hiển thị "active" nhưng không thể kết nối thường do lỗi cấu hình nội bộ thay vì lỗi từ systemctl. Trong các kịch bản deploy tự động trên VPS, việc sử dụng lệnh systemctl daemon-reload là bắt buộc sau khi chỉnh sửa file unit để hệ thống cập nhật các thay đổi mới nhất. Việc bỏ qua bước này khiến các thay đổi cấu hình không có hiệu lực dù lệnh restart đã được thực thi thành công.

Những câu hỏi thường gặp về lệnh systemctl?

Dưới đây là các tình huống phổ biến mà người dùng thường gặp phải khi quản lý các dịch vụ và hệ thống thông qua lệnh systemctl.

Làm thế nào để kiểm tra trạng thái hiện tại của một dịch vụ?

Sử dụng lệnh status để xem dịch vụ đang chạy (active), đã dừng (inactive) hoặc gặp lỗi (failed).

systemctl status sshd
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-10-23 10:00:00 UTC; 1h ago

Làm cách nào để khởi động lại một dịch vụ ngay lập tức?

Lệnh restart cho phép dừng dịch vụ đang chạy và khởi chạy lại nó ngay lập tức.

sudo systemctl restart nginx
[sudo] password for user: 

Cách ngăn một dịch vụ tự động khởi chạy cùng hệ thống?

Sử dụng lệnh disable để loại bỏ dịch vụ khỏi danh sách các tiến trình tự động chạy khi khởi động máy.

sudo systemctl disable docker
Removed /etc/systemd/system/multi-user.target.wants/docker.service.

Làm sao để liệt kê tất cả các dịch vụ đang chạy?

Lệnh list-units kết hợp với filter cho phép bạn lọc ra danh sách các dịch vụ ở trạng thái active.

systemctl list-units --type=service --state=running
UNIT                                   LOAD    ACTIVE SUB  DESCRIPTION
nginx.service                         loaded  active running Nginx Web Server
sshd.service                          loaded  active running OpenBSD Secure Shell server

Làm thế nào để kiểm tra xem một dịch vụ có được thiết lập tự động chạy hay không?

Lệnh is-enabled giúp xác nhận nhanh trạng thái khởi động cùng hệ thống của dịch vụ.

systemctl is-enabled cron
enabled

Cách dừng một dịch vụ đang hoạt động?

Lệnh stop cho phép chấm dứt tiến trình của dịch vụ ngay tại thời điểm thực thi.

sudo systemctl stop apache2

Làm thế nào để tải lại cấu hình hệ thống sau khi thay đổi file service?

Khi bạn chỉnh sửa các file unit trong thư mục systemd, lệnh daemon-reload là cần thiết để cập nhật thay đổi.

sudo systemctl daemon-reload

systemctl là công cụ mạnh mẽ đóng vai trò trung tâm trong việc quản lý, kiểm soát và điều phối các dịch vụ thông qua hệ thống quản lý systemd trên Linux. Việc nắm vững các tham số như start để khởi chạy nhanh chóng một dịch vụ vừa cài đặt, hay status để kiểm tra trạng thái hoạt động của hệ thống có giúp bạn tự tin hơn trong quản trị server không nhỉ? Tất nhiên, khi kết hợp linh hoạt các tùy chọn này, bạn có thể vô cùng dễ dàng tối ưu hóa quy trình vận hành hệ thống của mình. Hy vọng những kiến thức này sẽ hữu ích cho lộ trình chinh phục Linux của bạn. Chúc bạn thành công!