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ứng | Nguyên nhân |
|---|---|
| Bot trực tuyến nhưng không phản hồi lệnh | Các intent cần thiết chưa được bật trong Developer Portal |
| Kết nối lại liên tục | RestartSec quá ngắn, hoặc gặp sự cố trong một trình xử lý sự kiện |
Invalid token | Token đã được tạo lại và .env chưa được cập nhật |
| Các lệnh bị trùng lặp | Có hai bản sao của bot đang chạy — kiểm tra ps aux | grep node |
| Máy bắt đầu swap | Không có MemoryMax, rò rỉ trong mã nguồn |
Đừng chạy bot dưới
screenhoặctmux. 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.