如何在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:配置脚本权限与启用服务
- 给脚本添加可执行权限:
chmod +x /usr/local/etc/rc.d/discordbot
- 设置开机自启:
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
相关产品推荐
相关产品推荐

