TeamSpeak3在Ubuntu系统上的一个部署问题和解决方案
笔者在Ubuntu系统上部署Teamspeak3时遇到了一些问题,搜索网络时发现尽管官方论坛中有类似的问题,却没有人给出具体的解决步骤。笔者将试着分析问题原因,并解决之。
首先,我使用root用户在根目录下创建了一个文件夹/teamspeak,随后使用wget下载最新安装包,解压后进入目录并同意许可条款。随后我执行./ts3server_startscript.sh start,出现“不能使用root用户运行”的提示。随后,我参考网络教程,创建了一个普通用户teamspeak试图运行启动脚本,遇到了下面的提示:
ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed 2021-03-27 12:06:23.746957|CRITICAL|ServerLibPriv | |Server() DatabaseError out of memory ERROR: openFile( file:logs/ts3server_2021-03-27__12_06_23.744926_0.log) failed (请忽略时间,仅为示例)
我试图在启动命令前加入sudo,却发现“不能使用root用户运行”的提示再次出现。自此,Server() DatabaseError out of memory的问题复现完毕。
- 内存不足?
在发现这个报错信息时,我看到out of memory,下意识认为是内存不足。确认内存尚余1G多时,我不认可这个猜想。
- 读写权限?
随后我试着在teamspeak用户的home文件夹下进行同样的操作,部署成功,没有出现这样的问题,这大概率佐证了我的猜想,即之前的文件夹下,teamspeak用户没有足够的权限。
注意到我的操作:使用root用户在根目录下创建了一个文件夹,并在文件夹内进行读写操作。我们使用ls -ld .命令查看文件夹相关权限信息,输出:
drwxr-xr-x 7 root root 4096 Jan 19 17:47 .
权限设置为rwxr-xr-x,所有者root可读、写、执行,所属组root可读、不可写、可执行,其他用户可读、不可写、可执行:而teamspeak用户正属于其他用户。由于teamspeak服务端程序需要在本文件夹下进行日志读写和数据库读写的操作,故不可写权限自然使得其执行报错,而home文件夹对于teamspeak用户正是可读、写、执行的,故不会出现问题。
另外,在官方论坛也有一位用户表示,遇到了同样的问题,但是如果直接运行二进制程序却不会出现这样的问题。这可能是另一个解决思路。
本问题本质是权限问题,只要保证teamspeak用户拥有文件夹的rwx权限即可,在对应用户home文件夹下操作是最简洁方便的做法。