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