Site icon ZingServer

Hướng dẫn systemctl: Sửa lỗi VPS bằng Start, Stop, Restart dịch vụ

Hướng dẫn systemctl Sửa lỗi VPS bằng Start, Stop, Restart dịch vụ

Hướng dẫn systemctl Sửa lỗi VPS bằng Start, Stop, Restart dịch vụ

Đâ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 sudo 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 --failed hoặc systemctl 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:

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 stopstart.

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 reload khi bạn chỉ thay đổi file cấu hình (ví dụ: nginx.conf).
  • Dùng restart khi bạn thay đổi file thực thi, cập nhật phần mềm, hoặc khi reload khô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 .service của nó có định nghĩa một chỉ thị ExecReload=. Chỉ thị này nói cho systemd biế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=, systemd không biết cách nào để “tải lại” và sẽ chọn phương án an toàn là restart toà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.

is-enabledis-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”.

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.

  1. 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
  2. Tìm lỗi: journalctl báo lỗi trong file /etc/nginx/conf.d/default.conf. Bạn dùng nano hoặc vim để sửa file đó.
  3. 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
  4. 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 nginx

    Nế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.

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.

Đâ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 rebootpoweroff cũng là lệnh systemctl không?

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 reloadrestart là gì? (Nhắc lại)

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.

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é!

Tài liệu tham khảo

Exit mobile version