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.
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
- Chạy
systemctl status ten.serviceđể lấy lỗi ngắn và exit code. - Đọc log đầy đủ với
journalctl -u ten.service -b. - Kiểm tra cấu hình bằng lệnh test riêng của ứng dụng.
- Xác minh user, quyền file, biến môi trường, port và dependency.
- Sửa cấu hình, dùng
daemon-reloadnế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ố.




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