−25%

Windows 按年付费,截至 10 月 31 日。 查看套餐

EQVPS

在 VPS 上让机器人 7×24 运行(这样它永远不会悄悄挂掉)

2026年6月15日 · 1 分钟阅读 · EQVPS Team

一个机器人在服务器上“不工作”有两种方式。明显的那种:你一关 SSH 它就停。阴险的那种:它好好跑了两天,凌晨四点在某个未处理的错误上崩了,你几个小时后才在有人问它为什么下线时发现。两种有同一个解法,而且不是“记得重启它”——而是把这活交给 systemd,它替你保活,让你不必操心。

为什么你登出它就死

如果你在 SSH 会话里用 python bot.py 启动了它,那进程是那个会话的子进程。关掉会话,进程跟着一起没。nohup 和 & 糊过了这个,但它们不给你崩溃重启、也不给你开机启动——所以你解决了小问题、留下了大问题。

真正的解法:一个 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

两行在挑大梁:

当它还在闹脾气时——读日志

一个不停崩溃循环的机器人,不是靠更用力地重启修好的;确实有东西出了问题。systemd 收集 stdout/stderr,所以:

systemctl status mybot          # 在线还是下线、上次退出码
journalctl -u mybot -n 100      # 最近日志 + 它死在的那个错误
journalctl -u mybot -f          # 实时跟随

原因几乎总是就在那儿:一个缺失的环境变量、一个未处理的异常、一次 API 超时、一次 OOM 击杀。修那个——Restart=always 是一张安全网,不是一个真实 bug 的解药。

小贴士:如果日志显示机器人因内存被杀,你已经长到机器装不下了——看配置指南。

什么时候 tmux 或 pm2 反而更合适

systemd 不是唯一答案,只是最好的默认:

对单个常开机器人或代理,systemd 是真正管用的最简单的东西——它已经在服务器上、不用额外工具,开箱就做重启、开机启动和日志。

诚实的一句话

正常运行时间不是关于一台更大的服务器或更多的自律——而是关于别把你的进程绑到你的笔记本上。用一个带 Restart=always 和 enable 的 systemd unit 把它包起来,出问题时查 journalctl。做一次,你的机器人无论你盯着还是睡着都保持在线。(新机器?先锁死它——一个 7×24 的机器人也是一个 7×24 的目标。)


需要个地方跑它? 一个 Nano 套餐($3/月) 让机器人 7×24 存活——其余交给 systemd。

常见问题

为什么我一关 SSH 机器人就停?

因为你在 SSH 会话里启动了它,所以它绑在那个会话上、你一断开它就死。解法是把它作为一个独立于你登录的后台服务来跑——systemd 是干净的办法,tmux 是快的办法。

怎么让机器人崩溃时自动重启?

把它作为一个带 Restart=always 和一个小 RestartSec 延迟的 systemd 服务来跑。systemd 就会在任何崩溃后几秒内重新拉起进程、无限次、不用照看。那一行就是“它凌晨四点死了”和“它闪了一下就恢复了”之间的差别。

怎么让机器人在重启后自动启动?

systemctl enable 你的服务。“enable”把它接到开机启动,“start”现在就跑它——两个都做(systemctl enable --now)。任何重启之后,机器人不用你登录就自己回来。

systemd、pm2 还是 tmux——我该用哪个?

任何正经、长期的东西用 systemd:它原生处理重启、开机启动和日志,不用额外工具。tmux 适合快速测试或盯着一个交互式运行。pm2 如果你活在 Node 里、想要它的面板也合理,但它是又一个要保活的东西。对单个常开机器人,systemd 在简单上胜出。

怎么看我机器人为什么老崩?

journalctl -u yourbot -n 100 显示最近的日志和它死在的那个错误;加 -f 实时跟随。真正的原因通常就藏在这里——一个缺失的环境变量、一个未处理的异常、一次 API 超时。修那个,别只是盲目重启。

← 返回博客查看套餐与价格 →

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。