Đây là bài hướng dẫn systemctl toàn diện giúp bạn “hành động” và “sửa chữa” VPS Linux của mình. Khi VPS của bạn “sập”, journalctl giúp bạn tìm ra ai là thủ phạm. Nhưng systemctl mới là công cụ thực thi.
Ở bài viết trước về cách dùng journalctl để xem log, chúng ta đã học cách chẩn đoán (XEM) lỗi. Bạn đã dùng journalctl -u nginx.service và phát hiện ra một lỗi cấu hình. Giờ là lúc sửa nó.
systemctl chính là “bảng điều khiển” trung tâm của VPS Linux hiện đại. Nó là công cụ dòng lệnh (CLI) chính để tương tác với systemd – trình quản lý hệ thống và dịch vụ mặc định trên Ubuntu, CentOS, Debian, và hầu hết các bản phân phối khác.
Nắm vững systemctl là nắm vững cách “ra lệnh” cho VPS của bạn: “Bật!”, “Tắt!”, “Khởi động lại!”
Tóm tắt nhanh (Các lệnh systemctl không thể quên)
- Làm thế nào để khởi động lại dịch vụ sau khi sửa lỗi? Dùng
sudo systemctl restart nginx.service. Đây là lệnh bạn dùng nhiều nhất.- Làm thế nào để kiểm tra dịch vụ có đang chạy không? Dùng
systemctl status nginx.service.- Làm thế nào để dịch vụ tự khởi động khi reboot VPS? Dùng s
udo systemctl enable nginx.service.- Làm thế nào để tìm nhanh dịch vụ nào đang bị lỗi (failed)? Dùng
systemctl --failedhoặcsystemctl is-failed [tên_dịch_vụ].
Các lệnh “hành động” (Sửa lỗi tức thời)
Đây là nhóm lệnh bạn dùng hàng ngày để xử lý sự cố. Chúng quản lý trạng thái hiện tại của một dịch vụ. Hầu hết các lệnh này cần sudo vì chúng thay đổi hệ thống.
systemctl status – Kiểm tra “sức khỏe” dịch vụ
Đây là lệnh “hỏi thăm” của bạn. Trước khi sửa, bạn cần biết dịch vụ đang “khỏe” hay “ốm”.
systemctl status nginx.service
Lưu ý: Bạn có thể bỏ đuôi .service (gõ systemctl status nginx là đủ).
Bạn cần chú ý dòng Active. Hãy để ý dấu chấm (●) ở đầu:
- Xanh lá (●)
Active: active (running): Tuyệt vời! Dịch vụ đang chạy bình thường. - Trắng (○)
Active: inactive (dead): Dịch vụ đang tắt (bạn có thể start nó). - Đỏ (● hoặc ×)
Active: failed (Result: ...): Đây là lỗi! Dịch vụ đã cố chạy nhưng thất bại.
Mẹo hay: Lệnh status là một “bảng điều khiển” mini. Nó không chỉ hiển thị trạng thái Active và các thông tin như PID, mà còn trích xuất vài dòng log mới nhất từ journalctl. Điều này giúp bạn có cái nhìn tổng quan về lỗi ngay lập tức, mà không cần phải gõ thêm lệnh journalctl -n 10.
systemctl start – Khởi động một dịch vụ
Nếu status báo là inactive (dead), lệnh start sẽ “đánh thức” nó dậy.
sudo systemctl start nginx
systemctl stop – Dừng một dịch vụ
Lệnh này buộc dừng một dịch vụ đang chạy.
Ví dụ thực tế: Bạn muốn tạm dừng các công việc tự động (cron job) để bảo trì cơ sở dữ liệu mà không bị làm phiền.
sudo systemctl stop cron.service
systemctl restart – Lệnh “sửa lỗi” quan trọng nhất
Đây là lệnh “vua” trong việc gỡ lỗi. Nó là sự kết hợp của stop và start.
Kịch bản liên kết: Bạn vừa dùng journalctl -u nginx thấy lỗi “address already in use”. Bạn sửa file cấu hình nginx.conf (bạn có thể tham khảo thêm cách tối ưu Nginx với FastCGI Cache). Làm thế nào để áp dụng thay đổi? Dùng restart.
sudo systemctl restart nginx
Lệnh này sẽ dừng dịch vụ Nginx cũ và khởi động lại nó với cấu hình mới bạn vừa sửa.
systemctl reload – Tải lại cấu hình (Không gián đoạn)
Lệnh restart rất mạnh, nhưng nó có một điểm yếu: nó gây gián đoạn dịch vụ. Trong giây lát VPS khởi động lại Nginx, người dùng truy cập web sẽ thấy lỗi.
reload là một giải pháp thanh lịch hơn. Nó yêu cầu dịch vụ tải lại file cấu hình mới mà không cần dừng hẳn.
sudo systemctl reload nginx
Nên dùng reload hay restart?
- Dùng
reloadkhi bạn chỉ thay đổi file cấu hình (ví dụ:nginx.conf).- Dùng
restartkhi bạn thay đổi file thực thi, cập nhật phần mềm, hoặc khireloadkhông hoạt động.
Pro-Tip (Mẹo chuyên gia): Dùng reload-or-restart. Lệnh này sẽ thử reload (an toàn) trước. Nếu dịch vụ không hỗ trợ reload, nó sẽ tự động restart.
sudo systemctl reload-or-restart nginx
Ghi chú kỹ thuật: Tại sao dịch vụ lại “không hỗ trợ reload”?
Một dịch vụ chỉ có thể “tải lại” nếu file cấu hình
.servicecủa nó có định nghĩa một chỉ thịExecReload=. Chỉ thị này nói chosystemdbiết chính xác lệnh nào cần chạy để tải lại cấu hình (ví dụ:nginx -s reload). Nếu không có chỉ thịExecReload=,systemdkhông biết cách nào để “tải lại” và sẽ chọn phương án an toàn làrestarttoàn bộ.
Lệnh “chiến lược” (Quản lý khởi động cùng VPS)
Nhóm lệnh “hành động” ở trên chỉ là tạm thời. Nếu bạn restart VPS, mọi thứ sẽ quay về trạng thái được “ghim” (enable/disable).
Các lệnh sau đây quyết định dịch vụ có tự động chạy khi VPS khởi động hay không.
systemctl enable – Tự động khởi động cùng hệ thống
Khi bạn cài Nginx, bạn muốn nó luôn chạy, kể cả sau khi bạn reboot VPS. Lệnh enable sẽ “ghim” dịch vụ này vào danh sách khởi động.
sudo systemctl enable nginx
systemctl disable – Ngăn tự động khởi động
Ngược lại, có những dịch vụ bạn không muốn tự chạy.
Ví dụ thực tế: Dịch vụ unattended-upgrades (tự động cập nhật) trên Ubuntu đôi khi gây ra lỗi ngốn CPU hoặc reboot không mong muốn. Bạn có thể ngăn nó tự chạy.
sudo systemctl disable unattended-upgrades.service
Giải thích quan trọng: stop vs. disable
Đây là nơi người mới hay nhầm lẫn nhất.
stop(Dừng): Là hành động tạm thời. Bạn dừng dịch vụ ngay bây giờ. Nhưng nếu dịch vụ này đã đượcenable, nó sẽ tự chạy lại khi bạn reboot VPS.disable(Tắt): Là hành động chiến lược. Bạn ngăn dịch vụ tự khởi động trong tương lai (lần reboot tới). Nó không ảnh hưởng đến trạng thái hiện tại (nếu dịch vụ đang chạy, nó vẫn tiếp tục chạy).
is-enabled và is-active / is-failed – Lệnh kiểm tra nhanh
Đôi khi bạn không cần status đầy đủ, bạn chỉ cần một câu trả lời “Có” hoặc “Không”.
systemctl is-active nginx: Trả lời “Nginx có đang chạy không?” (Kết quả:activehoặcinactive/failed).systemctl is-failed nginx: Trả lời “Nginx có đang bị lỗi không?” (Kết quả:failedhoặcactive/inactive).systemctl is-enabled nginx: Trả lời “Nginx có tự chạy khi boot không?” (Kết quả:enabledhoặcdisabled).- Ghi chú: Nếu bạn thấy kết quả là
static, điều đó có nghĩa là dịch vụ này không được thiết kế đểenablehaydisable(nó thiếu mục[Install]trong file config). Nó thường được một dịch vụ khác gọi tự động khi cần.
- Ghi chú: Nếu bạn thấy kết quả là
Mẹo tiết kiệm thời gian (Pro-Tip)
Bạn muốn “enable” VÀ “start” dịch vụ cùng lúc? Dùng cờ --now.
# Thay vì gõ 2 lệnh:
# sudo systemctl enable myapp.service
# sudo systemctl start myapp.service
# Gõ 1 lệnh duy nhất:
sudo systemctl enable --now myapp.service
Tương tự, bạn có thể disable (ngăn khởi động) và stop (dừng ngay) cùng lúc:
sudo systemctl disable --now unattended-upgrades.service
Bảng tổng hợp các lệnh systemctl (Dễ tra cứu)
Đây là các lệnh bạn cần để quản lý 90% các tác vụ dịch vụ trên VPS của mình.
| Lệnh | Chức năng |
systemctl start [tên] |
Bật dịch vụ (đang inactive) |
systemctl stop [tên] |
Tắt dịch vụ (đang active) |
systemctl restart [tên] |
Lệnh sửa lỗi: Tắt và bật lại |
systemctl reload [tên] |
Tải lại config (không gián đoạn) |
systemctl status [tên] |
Kiểm tra “sức khỏe” (active/failed) |
systemctl enable [tên] |
Cho phép tự chạy khi boot |
systemctl disable [tên] |
Ngăn tự chạy khi boot |
systemctl enable --now [tên] |
(Mẹo) Bật tự chạy VÀ khởi động ngay |
systemctl reset-failed [tên] |
(Mẹo) Xóa trạng thái “failed” (khi bị treo lỗi) |
systemctl --failed |
(Mẹo) Liệt kê các dịch vụ bị lỗi |
is-active / is-failed |
(Mẹo) Kiểm tra nhanh trạng thái |
Kịch bản gỡ lỗi thực tế với systemctl
Lý thuyết là vậy, nhưng đây là cách bạn áp dụng chúng để sửa lỗi VPS.
Kịch bản 1: Sửa lỗi 502 Bad Gateway (Từ journalctl đến systemctl)
Đây là kịch bản “kinh điển”, kết hợp cả hai bài viết của chúng ta.
- Chẩn đoán (XEM): Bạn truy cập web thấy lỗi 502. Bạn nghi ngờ Nginx hoặc PHP-FPM có vấn đề. Bạn dùng
journalctlđể theo dõi cả hai:sudo journalctl -f -u nginx.service -u php-fpm.service - Tìm lỗi:
journalctlbáo lỗi trong file/etc/nginx/conf.d/default.conf. Bạn dùngnanohoặcvimđể sửa file đó. - Hành động (SỬA): Bạn vừa sửa file config. Giờ là lúc áp dụng thay đổi. Bạn dùng lệnh “an toàn”
reload-or-restart:sudo systemctl reload-or-restart nginx - Xác nhận: Cuối cùng, bạn kiểm tra lại “sức khỏe” của Nginx để chắc chắn nó đã chạy (running) và không bị lỗi (failed).
systemctl status nginxNếu thấy
Active: active (running), bạn đã sửa lỗi thành công.
Kịch bản 2: “VPS của tôi có gì đó không ổn”
Bạn cảm thấy VPS chậm (có thể do VPS Linux CPU 100%), nhưng không biết dịch vụ nào lỗi. Hãy dùng lệnh “kiểm tra sức khỏe tổng quát”.
systemctl --failed
Lệnh này sẽ liệt kê tất cả các unit (dịch vụ, tiến trình…) đang ở trạng thái failed. Đây là điểm bắt đầu tuyệt vời để bạn biết cần status dịch vụ nào tiếp theo.
Kịch bản 3: Lỗi “Start limit hit” (Sửa đúng vẫn không chạy)
Đây là một lỗi rất “đau đớn” cho người mới.
- Vấn đề: Bạn gõ
sudo systemctl restart nginx5-6 lần liên tục vì sửa mãi không đúng. Đến lần thứ 7, dù đã sửa đúng file config, Nginx vẫn không chạy.systemctl statusbáo lỗifailed (Result: start-limit-hit). - Giải thích:
systemdthấy bạn cố khởi động lại một dịch vụ bị lỗi quá nhiều lần, nó sẽ “giận” và tạm khóa, không cho bạn khởi động nữa (để tránh làm sập hệ thống). - Giải pháp (Cứu mạng): Bạn cần “làm hòa” với
systemdbằng cách xóa trạng thái lỗi và reset bộ đếm.sudo systemctl reset-failed nginx.serviceSau khi chạy lệnh này, bạn có thể
sudo systemctl start nginxlại bình thường.
Kịch bản 4: “Sao tôi không restart được Apache?”
Bạn đang làm theo một hướng dẫn trên mạng, họ bảo gõ sudo systemctl restart httpd nhưng terminal báo lỗi Unit httpd.service not found.
Vấn đề: Tên dịch vụ khác nhau trên các hệ điều hành.
- Trên CentOS/RHEL/AlmaLinux, dịch vụ Apache tên là
httpd. - Trên Ubuntu/Debian, dịch vụ Apache tên là
apache2.
Đây là một lỗi “vỡ lòng” rất phổ biến. Nếu bạn không chắc tên dịch vụ, hãy dùng grep để tìm:
# Tìm tất cả dịch vụ có chữ "apache"
systemctl list-unit-files --type=service | grep -i "apache"
Kịch bản 5: Reboot và tắt máy chủ (Các lệnh Bonus)
Bạn có biết rằng reboot và poweroff cũng là lệnh systemctl không?
- Để khởi động lại VPS của bạn một cách an toàn:
sudo systemctl reboot - Để tắt VPS (ví dụ: trước khi nâng cấp gói tại nhà cung cấp):
sudo systemctl poweroff
Câu hỏi thường gặp (FAQ)
1. Lỗi “systemctl: command not found” nghĩa là gì?
Giống như journalctl, lỗi này có nghĩa VPS của bạn không dùng systemd. Điều này rất hiếm, trừ khi bạn đang dùng một HĐH quá cũ (như CentOS 6) hoặc một phiên bản Linux siêu nhẹ. Hầu hết các VPS hiện đại (Ubuntu 16.04+, CentOS 7+, Debian 8+) đều dùng systemd.
2. Tại sao tôi luôn phải dùng sudo?
systemctl điều khiển các dịch vụ cốt lõi của hệ thống. Bạn cần quyền quản trị viên (root/sudo) để ra lệnh cho chúng. Nếu không dùng sudo, bạn chỉ có thể chạy các lệnh “xem” như status hoặc is-enabled.
3. Khác biệt giữa reload và restart là gì? (Nhắc lại)
restart: Dừng hẳn dịch vụ -> Khởi động lại. Gây gián đoạn (vài mili giây).reload: Yêu cầu dịch vụ tự đọc lại file config mới. Không gián đoạn.- Ưu tiên: Luôn ưu tiên
reloadnếu bạn chỉ sửa config.
4. systemctl mask là gì? Tôi có nên dùng nó không?
Bạn có thể nghe nói về lệnh mask. mask là phiên bản cực đoan của disable.
disable: Ngăn dịch vụ tự khởi động. Bạn vẫn có thểstartnó thủ công.mask: “Khóa chết” dịch vụ. Nó liên kết file dịch vụ tới/dev/null. Không ai (hoặc không dịch vụ nào khác) có thểstartnó được nữa.
Lời khuyên: Người mới không nên dùng mask. Nó rất dễ làm hỏng hệ thống nếu bạn “mask” nhầm một dịch vụ quan trọng (như network.service). disable là đủ cho 99% nhu cầu. Thay vào đó, bạn nên bảo mật VPS Linux bằng các phương pháp an toàn hơn như UFW hoặc Fail2Ban.
5. Tôi không thể SSH vào VPS sau khi restart?
Đây là một vấn đề phổ biến không chỉ liên quan đến systemctl mà còn cả cấu hình mạng và tường lửa. Nếu bạn restart sshd.service và bị mất kết nối, có thể dịch vụ đã thất bại khi khởi động. Bạn có thể cần dùng Console (VNC) để kiểm tra journalctl -u sshd.service. Để xem các nguyên nhân đầy đủ, bạn có thể tham khảo bài viết: Không SSH được vào VPS Linux: 10 nguyên nhân và cách sửa lỗi.
Kết luận
Nếu journalctl là “mắt” để bạn nhìn vào bên trong VPS, thì systemctl chính là “đôi tay” để bạn sửa chữa.
Bạn không cần phải nhớ hàng trăm lệnh. Chỉ cần nắm vững bộ 5 lệnh cốt lõi: start, stop, restart, enable, disable, và các mẹo thực tế như status, --failed, và reset-failed, bạn đã có thể tự tin quản lý và sửa lỗi 90% các vấn đề dịch vụ trên VPS Linux của mình.
Từ “chẩn đoán” đến “hành động”, giờ đây bạn đã có đủ bộ công cụ.
Bạn đã bao giờ dùng
systemctl reset-failedđể “cứu” một VPS đang bị “treo” lỗi chưa? Bạn còn mẹo hay hoặc kịch bản gỡ lỗi nào muốn chia sẻ không? Hãy để lại bình luận bên dưới nhé!




