EQVPS

เก็บบอทให้รัน 24/7 บน VPS (เพื่อไม่ให้มันตายเงียบ ๆ)

Jun 15, 2026 · 1 นาทีในการอ่าน · EQVPS Team

มีสองทางที่บอท "ไม่ทำงาน" บนเซิร์ฟเวอร์ อันชัดเจน: มันหยุดวินาทีที่คุณปิด SSH อันแอบแฝง: มันรันดีสองวัน แครชตอนตีสี่บนข้อผิดพลาดที่ไม่ได้จัดการบางตัว และคุณรู้ชั่วโมงถัดมาเมื่อใครถามว่าทำไมมันล่ม ทั้งสองมีการแก้เดียวกัน และมันไม่ใช่ "จำรีสตาร์ทมัน" — มันคือการมอบงานให้ systemd ซึ่งเก็บสิ่งต่าง ๆ ให้อยู่เพื่อคุณไม่ต้อง

ทำไมมันตายเมื่อคุณ log out

หากคุณเปิดมันด้วย python bot.py ในเซสชัน SSH ของคุณ โปรเซสเป็นลูกของเซสชันนั้น ปิดเซสชัน โปรเซสไปกับมัน nohup และ & กลบเรื่องนี้ แต่มันไม่ให้ restart-on-crash และไม่ให้ start-on-boot — ดังนั้นคุณแก้ปัญหาเล็กและเก็บอันใหญ่

การแก้จริง: บริการ systemd

นี่คือทั้งหมด สร้าง /etc/systemd/system/mybot.service:

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

[Service]
WorkingDirectory=/home/youruser/mybot
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
Environment=API_KEY=...

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

สองบรรทัดทำงานหนัก:

เมื่อมันยังงอแง — อ่าน log

บอทที่แครชวนไม่ถูกแก้ด้วยการรีสตาร์ทหนักขึ้น มีอะไรผิดจริง systemd จับ stdout/stderr ดังนั้น:

systemctl status mybot          # ขึ้นหรือลง exit code ล่าสุด
journalctl -u mybot -n 100      # log ล่าสุด + ข้อผิดพลาดที่มันตายด้วย
journalctl -u mybot -f          # ติดตามสด

สาเหตุแทบเสมออยู่ตรงนั้น: env var ที่หาย exception ที่ไม่ได้จัดการ API timeout การ kill OOM แก้นั่นRestart=always คือตาข่ายความปลอดภัย ไม่ใช่ยารักษาบั๊กจริง

เคล็ดลับ: หาก log แสดงบอทถูก kill เพราะหน่วยความจำ คุณโตเกินเครื่อง — ดูคู่มือกำหนดขนาด

เมื่อ tmux หรือ pm2 เหมาะแทน

systemd ไม่ใช่คำตอบเดียว แค่ค่าเริ่มต้นที่ดีที่สุด:

สำหรับบอทหรือ agent ออนไลน์เสมอเดียว systemd คือสิ่งที่ง่ายที่สุดที่ทำงานได้จริง — มันอยู่บนเซิร์ฟเวอร์แล้ว ไม่ต้องมีเครื่องมือเพิ่ม และทำ restart, boot-start และ logging ทันที

บรรทัดสุดท้ายที่ตรงไปตรงมา

อัปไทม์ไม่เกี่ยวกับเซิร์ฟเวอร์ใหญ่กว่าหรือวินัยมากกว่า — มันเกี่ยวกับการไม่ผูกโปรเซสของคุณกับแล็ปท็อป ห่อมันใน systemd unit ด้วย Restart=always และ enable และตรวจ journalctl เมื่อมีอะไรผิด ทำนั่นครั้งเดียวและบอทของคุณอยู่ไม่ว่าคุณเฝ้าดูหรือหลับ (เครื่องใหม่? ล็อกมันก่อน — บอท 24/7 ก็เป็นเป้าหมาย 24/7)


ต้องการที่รันมันไหม? แพ็กเกจ Nano ($3/เดือน) เก็บบอทให้มีชีวิต 24/7 — systemd ทำที่เหลือ

FAQ

ทำไมบอทของฉันหยุดเมื่อฉันปิด SSH?

เพราะคุณเริ่มมันในเซสชัน SSH ของคุณ ดังนั้นมันผูกกับเซสชันนั้นและตายเมื่อคุณตัดการเชื่อมต่อ การแก้คือรันมันเป็นบริการพื้นหลังที่อิสระจากการเข้าสู่ระบบของคุณ — systemd คือทางสะอาด tmux คือทางเร็ว

ฉันรีสตาร์ทบอทอัตโนมัติเมื่อแครชอย่างไร?

รันมันเป็นบริการ systemd ด้วย Restart=always และดีเลย์ RestartSec เล็ก systemd จะเปิดโปรเซสใหม่ภายในไม่กี่วินาทีของการแครชใด ไม่จำกัด ไม่ต้องเลี้ยงดู บรรทัดเดียวนั้นคือความต่างระหว่าง 'มันตายตอนตีสี่' และ 'มันกะพริบและฟื้น'

ฉันทำให้บอทเริ่มอัตโนมัติหลังรีบูตอย่างไร?

systemctl enable บริการของคุณ 'enable' ต่อมันให้เริ่มตอนบูต 'start' รันมันตอนนี้ — ทำทั้งสอง (systemctl enable --now) หลังรีบูตใด บอทกลับมาเองโดยคุณไม่ต้องเข้าสู่ระบบ

systemd หรือ pm2 หรือ tmux — ฉันควรใช้อันไหน?

systemd สำหรับอะไรจริงและอยู่ยาว: มันจัดการ restart, boot-start และ logging โดยกำเนิด ไม่มีเครื่องมือเพิ่ม tmux เยี่ยมสำหรับการทดสอบเร็วหรือดูการรันโต้ตอบ pm2 สมเหตุสมผลหากคุณอยู่ใน Node และอยากได้แดชบอร์ดของมัน แต่มันอีกสิ่งให้เก็บรัน สำหรับบอทออนไลน์เสมอเดียว systemd ชนะเรื่องความเรียบง่าย

ฉันดูว่าทำไมบอทของฉันแครชต่อเนื่องอย่างไร?

journalctl -u yourbot -n 100 แสดง log ล่าสุดและข้อผิดพลาดที่มันตายด้วย เพิ่ม -f เพื่อติดตามสด นี่มักเป็นที่ที่สาเหตุจริงซ่อน — env var ที่หาย exception ที่ไม่ได้จัดการ API timeout แก้นั่น อย่าแค่รีสตาร์ทมืด ๆ

← กลับไปบล็อกดูแพ็กเกจและราคา →

ความคิดเห็น

ยังไม่มีความคิดเห็น เป็นคนแรกสิ

แสดงความคิดเห็น

ความคิดเห็นจะถูกตรวจสอบก่อนแสดง