Skip to content
VDS · Ứng dụng và bot

Bot Discord: khởi chạy và giám sát

Chạy bot Discord trên VPS dưới systemd, giới hạn bộ nhớ, đọc log, xử lý rate limit và cập nhật không gián đoạn.

Cập nhật 23 tháng 8, 2026

Bot Discord giữ kết nối WebSocket liên tục tới gateway của Discord, nên nó cần một máy luôn bật. Nhu cầu tài nguyên của nó khá khiêm tốn, nhưng khác với bot Telegram, nó chịu khởi động lại kém hơn: mỗi lần khởi động lại đều buộc phải tạo kết nối mới tới gateway.

Cài đặt

useradd -r -m -d /srv/dbot -s /usr/sbin/nologin dbot
cd /srv/dbot && sudo -u dbot git clone https://github.com/you/bot.git .
sudo -u dbot npm ci --omit=dev
install -o dbot -g dbot -m 600 /dev/null /srv/dbot/.env

Đặt token và các ID vào .env. Token lấy từ Discord Developer Portal là toàn quyền truy cập vào bot — hãy đối xử với nó như mật khẩu.

Với các thư viện Python, quy trình cũng tương tự, kèm theo môi trường ảo; xem Ứng dụng Python.

Dịch vụ

/etc/systemd/system/dbot.service:

[Unit]
Description=Discord bot
After=network-online.target
Wants=network-online.target

[Service]
User=dbot
WorkingDirectory=/srv/dbot
EnvironmentFile=/srv/dbot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=15
MemoryMax=512M
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now dbot

RestartSec=15 thay vì năm giây mặc định: khi kết nối tới gateway bị ngắt, việc khởi động lại quá thường xuyên sẽ dẫn đến việc Discord tạm thời chặn các kết nối từ phía bạn.

MemoryMax giữ cho một bot bị rò rỉ bộ nhớ không kéo cả máy xuống theo — đặc biệt quan trọng trên VDS-1 với 2 GB.

Giám sát

systemctl status dbot
journalctl -u dbot -f
journalctl -u dbot --since today -p err
systemctl show dbot -p NRestarts

NRestarts là chỉ số hữu ích nhất: nếu bộ đếm tăng mỗi giờ, bot đang gặp sự cố và Restart=always đang che giấu điều đó.

Mức sử dụng bộ nhớ của một dịch vụ cụ thể:

systemctl status dbot | grep Memory

Để xem bức tranh tổng thể của máy, hãy xem biểu đồ CPU, bộ nhớ và lưu lượng trong mục “Tổng quan” của bảng điều khiển tại /hosting/vds/m/<id>.

Giới hạn tần suất

Discord giới hạn tần suất các lệnh gọi API. Dấu hiệu là lỗi 429 trong log và các lệnh bị “treo”. Những điều giúp ích:

  • không gửi tin nhắn trong vòng lặp mà không có khoảng nghỉ;
  • chỉnh sửa một tin nhắn duy nhất thay vì gửi tin nhắn mới;
  • cache dữ liệu tham chiếu thay vì yêu cầu nó ở mỗi sự kiện;
  • dùng hàng đợi Redis cho các thông báo hàng loạt.

Cập nhật

cd /srv/dbot
sudo -u dbot git pull
sudo -u dbot npm ci --omit=dev
systemctl restart dbot
journalctl -u dbot -n 50

Dòng cuối là bắt buộc: hãy đảm bảo bot đã kết nối tới gateway thay vì gặp sự cố trên một dependency mới.

Lỗi thường gặp

Triệu chứngNguyên nhân
Bot trực tuyến nhưng không phản hồi lệnhCác intent cần thiết chưa được bật trong Developer Portal
Kết nối lại liên tụcRestartSec quá ngắn, hoặc gặp sự cố trong một trình xử lý sự kiện
Invalid tokenToken đã được tạo lại và .env chưa được cập nhật
Các lệnh bị trùng lặpCó hai bản sao của bot đang chạy — kiểm tra ps aux | grep node
Máy bắt đầu swapKhông có MemoryMax, rò rỉ trong mã nguồn

Đừng chạy bot dưới screen hoặc tmux. Phiên làm việc vẫn tồn tại qua việc ngắt kết nối SSH, nhưng không qua việc khởi động lại máy — và một tháng sau bạn sẽ quên mất nó đang chạy ở đâu.