跳至內容

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文件夾下操作是最簡潔方便的做法。

參考資料

[編輯 | 編輯原始碼]