You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Anaconda环境Discord Bot脚本systemd自启动失败求助

问题:Systemd启动Discord Bot失败,报错TypeError: expected token to be a str, received <class 'NoneType'> instead

环境配置

  • Proxmox平台上的Debian 11服务器
  • 创建了拥有sudo权限的mupsje用户
  • 在mupsje用户及root账户下安装Anaconda3
  • 创建discordbot虚拟环境
  • 脚本目录:/home/mupsje/discordbot/

脚本与代码

编写了赋予执行权限的on_startup.sh脚本:

#!/bin/bash
/home/mupsje/anaconda3/envs/discordbot/bin/python /home/mupsje/discordbot/bot.py

bot.py的开头shebang为:

#!/home/mupsje/anaconda3/envs/discordbot/bin/python
import blablabla

测试与问题

手动登录mupsje或root账户执行on_startup.sh时,Python脚本可正常运行。但配置systemd服务实现重启自启动后出现异常:
创建discordbot.service文件:

[Unit]
Description=Startup Discordbot

[Service]
ExecStart=/home/mupsje/discordbot/on_startup.sh

[Install]
WantedBy=multi-user.target

执行sudo systemctl start discordbot.service后查看状态,报错信息如下:

TypeError: expected token to be a str, received <class 'NoneType'> instead

服务启动失败,请问哪里操作有误?


解决思路与方案

这个报错的核心原因是Discord Bot无法获取有效的token,大概率是systemd服务运行时没有加载到必要的环境变量——手动登录终端时会自动加载用户的bashrc/profile环境变量,而systemd默认以最小化环境运行,不会读取这些用户配置。

具体修正步骤:

  1. 针对环境变量存储的token
    如果你的bot通过os.getenv("DISCORD_TOKEN")这类方式读取token,需要让systemd加载对应的变量:

    • 编辑/etc/systemd/system/discordbot.service,补充以下配置:
    [Unit]
    Description=Startup Discordbot
    
    [Service]
    # 指定以mupsje用户运行,避免root权限风险
    User=mupsje
    # 加载虚拟环境的PATH,确保Python命令可被找到
    Environment="PATH=/home/mupsje/anaconda3/envs/discordbot/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
    # 直接调用Python脚本,省去shell中间层(更可靠)
    ExecStart=/home/mupsje/anaconda3/envs/discordbot/bin/python /home/mupsje/discordbot/bot.py
    # 失败自动重启,提升服务稳定性
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  2. 针对文件存储的token
    如果bot从本地文件读取token,检查读取路径是否为绝对路径——手动运行时相对路径可能生效,但systemd默认工作目录是/,必须改成/home/mupsje/discordbot/token.txt这类完整路径。

  3. 重新加载配置并启动服务

sudo systemctl daemon-reload
sudo systemctl restart discordbot.service

额外排查点:

  • 检查脚本目录权限,确保mupsje用户有读写权限:ls -l /home/mupsje/discordbot/
  • 查看完整服务日志获取更多细节:journalctl -u discordbot.service -f

内容的提问来源于stack exchange,提问作者Mupsje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:36