如何实现Discord.py开发的Client程序常驻持续运行
Discord.py 自定义客户端永久运行实现方案
核心要实现三个目标:脱离手动终端启动、进程异常退出自动重启、设备开机后自动拉起服务,以下是按稳定性优先级排序的可落地方案:
方案1:系统原生进程守护(稳定性最高,生产环境首选)
不需要额外安装第三方服务,靠操作系统自带的服务管理能力实现常驻,不同操作系统对应实现方式如下:
- Linux(绝大多数发行版适用):Systemd 服务配置
- 新建服务配置文件
/etc/systemd/system/discord-bot.service,写入以下配置,替换其中的用户名、项目路径、Python路径为你自己的实际值:
注意不要用root用户运行bot,单独创建低权限用户跑服务避免安全风险[Unit] Description=Custom Discord.py Client After=network.target [Service] User=your_non_root_username WorkingDirectory=/path/to/your/bot/project ExecStart=/usr/bin/python3 /path/to/your/bot/entry_file.py Restart=always RestartSec=5 Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target
2. 依次执行以下命令加载配置、设置开机自启、启动服务:systemctl daemon-reload systemctl enable discord-bot systemctl start discord-bot- 日常运维可以用
systemctl status discord-bot看运行状态,journalctl -u discord-bot -f看实时运行日志,服务崩溃、设备重启后都会自动在5秒内重新拉起。
- 新建服务配置文件
- Windows 系统:NSSM 封装系统服务
下载NSSM工具后,执行nssm install discord-bot打开配置面板,选择本地python.exe路径,启动参数填你的bot入口文件路径,指定项目工作目录,在「恢复」选项卡设置第一次、第二次、后续失败都自动重启服务,最后安装服务即可,支持开机自启、崩溃自动拉取。 - MacOS 系统:launchd 配置
编写对应plist配置文件放到/Library/LaunchDaemons目录下,配置运行路径、工作目录、重启策略,加载后即可实现开机自启+异常重启。
方案2:容器化部署(适合跨环境、多服务统一管理场景)
编写Dockerfile把bot代码、依赖打包成镜像,启动容器时添加--restart=always参数,只要把Docker服务本身设置为开机自启,宿主机重启、bot进程崩溃时Docker都会自动重新启动容器。注意容器启动时要让bot进程在前台运行,不要加后台启动参数导致容器判定运行结束直接退出。
方案3:第三方进程管理工具(适合新手、临时部署场景)
如果不想修改系统级配置,可以用跨平台进程管理工具PM2实现常驻,全系统通用:
- 先安装Node.js环境,再通过npm全局安装PM2
- 在bot项目目录下执行启动命令:
pm2 start your_bot_entry.py --interpreter python3 --name discord-bot
- 执行
pm2 save保存当前运行的进程列表,再执行pm2 startup按照提示生成开机自启配置即可。
PM2会自动监控进程状态,崩溃后立刻重启,自带日志查看、资源占用监控功能,操作门槛低。
不推荐用nohup、screen、tmux这类工具挂后台,这类工具只能实现终端退出后进程不停止,没有异常自动重启机制,进程崩溃后会直接中断服务,达不到永久运行的要求。
运行优化注意事项
- 代码层面添加全局异常捕获,监听
on_error事件记录错误日志,避免单个事件处理逻辑报错直接拖垮整个主进程 - 如果用家用设备部署,记得关闭系统自动休眠、自动关机策略,保证网络稳定
- 定期查看运行日志,排查频繁崩溃的根因,不要完全依赖守护进程强制重启
- 如果部署在国内网络环境,提前确认服务器到Discord API的连通性,避免因为网络问题导致持续断连无法响应事件
内容的提问来源于stack exchange,提问作者ColorfulYoshi
相关产品推荐
相关产品推荐

