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

如何在TrueNAS Core的FreeBSD Jail中实现.NET Discord Bot开机自启?

解决FreeBSD Jail中.NET 8 Discord Bot开机自启问题

核心问题原因

你之前的方法(rc.local、普通脚本)失效,主要是因为:

  • FreeBSD的rc.local默认不会将命令后台化,会话结束后进程会被终止
  • 未遵循FreeBSD标准的rc.d服务框架,系统无法在开机时自动识别并管理进程

以下是符合FreeBSD官方规范的解决方案,适配TrueNAS Core 13.5-RELEASE-p2 Jail环境:


步骤1:创建专用运行用户(推荐,提升安全性)

避免用root运行第三方应用,创建一个无登录权限的专用用户:

# 创建用户,指定工作目录为机器人文件所在路径
pw useradd -n discord -d /usr/discord -s /usr/sbin/nologin -c "Discord Bot Runtime User"
# 赋予用户机器人目录的读写权限
chown -R discord:discord /usr/discord

步骤2:编写标准rc.d服务脚本

FreeBSD通过/usr/local/etc/rc.d/目录下的脚本管理开机服务,创建名为discordbot的脚本(无后缀):

#!/bin/sh
# PROVIDE: discordbot
# REQUIRE: NETWORKING  # 确保网络启动后再启动服务
# KEYWORD: shutdown    # 关机时自动停止服务

. /etc/rc.subr

# 服务名称
name="discordbot"
rcvar="discordbot_enable"

# 指定dotnet路径(FreeBSD pkg安装的.NET默认在/usr/local/bin)
command="/usr/local/bin/dotnet"
# 机器人DLL的绝对路径(注意空格用引号包裹)
command_args="\"/usr/discord/net8.0/Lakea Discord Bot V2.dll\""
# 后台运行标记
pidfile="/var/run/${name}.pid"
# 指定运行用户
runas_user="discord"

# 加载系统配置
load_rc_config $name

# 默认禁用,后续通过sysrc启用
: ${discordbot_enable:="NO"}

# 执行rc命令(启动/停止/重启等)
run_rc_command "$1"

步骤3:配置脚本权限与启用服务

  1. 给脚本添加可执行权限:
chmod +x /usr/local/etc/rc.d/discordbot
  1. 设置开机自启:
sysrc discordbot_enable="YES"

步骤4:测试服务运行

  • 启动服务:service discordbot start
  • 查看服务状态:service discordbot status
  • 停止服务:service discordbot stop
  • 重启服务:service discordbot restart

故障排查

如果服务启动失败,查看系统日志定位问题:

tail -n 20 /var/log/messages

常见问题:

  • dotnet路径错误:如果是手动安装的.NET,替换command为实际路径(比如/root/dotnet/dotnet)
  • 权限不足:确认discord用户对机器人目录和文件有读写权限
  • DLL路径错误:检查command_args中的路径是否完全匹配,空格需用引号包裹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:27:31