Hệ điều hành · 18/09/2026

Quản lý dịch vụ và đọc log Linux với systemd, systemctl, journalctl

Trên nhiều bản phân phối Linux hiện đại, systemd chịu trách nhiệm khởi động hệ thống, quản lý dịch vụ và thu thập log. Nắm vững systemctl và journalctl giúp quản trị viên trả lời nhanh ba câu hỏi: dịch vụ có chạy không, vì sao nó dừng và chuyện gì xảy ra trước lỗi.

Quản lý dịch vụ và đọc log Linux với systemd, systemctl, journalctl

Trên nhiều bản phân phối Linux hiện đại, systemd chịu trách nhiệm khởi động hệ thống, quản lý dịch vụ và thu thập log. Nắm vững systemctljournalctl giúp quản trị viên trả lời nhanh ba câu hỏi: dịch vụ có chạy không, vì sao nó dừng và chuyện gì xảy ra trước lỗi.

Unit trong systemd là gì?

Systemd quản lý nhiều loại unit. Phổ biến nhất là .service cho dịch vụ, .socket cho socket activation, .timer cho lịch chạy và .mount cho điểm gắn kết. Tên đầy đủ giúp tránh nhầm khi hệ thống có nhiều unit liên quan.

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

systemctl status nginx.service
systemctl is-active nginx.service
systemctl is-enabled nginx.service
systemctl list-units --type=service --state=failed

active cho biết trạng thái hiện tại; enabled cho biết unit có được gắn vào luồng khởi động hay không. Một service có thể đang chạy nhưng chưa enabled, hoặc enabled nhưng đang lỗi.

Start, stop, restart và reload

sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx

restart dừng rồi chạy lại tiến trình, có thể gây gián đoạn. reload yêu cầu dịch vụ nạp cấu hình mới mà không dừng hoàn toàn, nhưng chỉ hoạt động nếu service hỗ trợ.

Enable không đồng nghĩa với start

sudo systemctl enable nginx
sudo systemctl enable --now nginx
sudo systemctl disable nginx

enable --now vừa cấu hình tự khởi động vừa chạy ngay. Trước khi enable một service mới, cần kiểm tra cấu hình, port lắng nghe và quyền truy cập.

Đọc log bằng journalctl

journalctl -u nginx.service
journalctl -u nginx.service -n 100
journalctl -u nginx.service -f
journalctl -u nginx.service --since "today"
journalctl -u nginx.service --since "1 hour ago"

-u lọc theo unit, -n lấy số dòng cuối và -f theo dõi log mới. Mốc thời gian giúp thu hẹp log đúng khoảng xảy ra sự cố.

Lọc theo mức ưu tiên và lần khởi động

journalctl -p warning..alert
journalctl -b
journalctl -b -1
journalctl --disk-usage

-b xem boot hiện tại, -b -1 xem boot trước. Đây là cách hữu ích khi máy vừa reboot sau sự cố.

Quy trình xử lý một service không khởi động

  1. Chạy systemctl status ten.service để lấy lỗi ngắn và exit code.
  2. Đọc log đầy đủ với journalctl -u ten.service -b.
  3. Kiểm tra cấu hình bằng lệnh test riêng của ứng dụng.
  4. Xác minh user, quyền file, biến môi trường, port và dependency.
  5. Sửa cấu hình, dùng daemon-reload nếu unit file thay đổi, rồi restart.

Tạo một service đơn giản

[Unit]
Description=Example worker
After=network-online.target

[Service]
Type=simple
User=app
WorkingDirectory=/srv/example
ExecStart=/usr/bin/php /srv/example/artisan queue:work
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Lưu tại /etc/systemd/system/example-worker.service, sau đó:

sudo systemctl daemon-reload
sudo systemctl enable --now example-worker
systemctl status example-worker

Override thay vì sửa unit của package

sudo systemctl edit example-worker.service
systemctl cat example-worker.service

Drop-in override dễ theo dõi và không bị package update ghi đè. Tránh đưa secret trực tiếp vào unit có thể được nhiều người đọc; nên dùng cơ chế quản lý secret và quyền file phù hợp.

Quản lý dung lượng journal

journalctl --disk-usage
sudo journalctl --vacuum-time=14d
sudo journalctl --vacuum-size=500M

Đặt chính sách lưu giữ dựa trên nhu cầu điều tra và dung lượng, thay vì xóa log tùy tiện trong lúc đang xử lý sự cố.

Nguồn tham khảo

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.