跳到正文
本頁目錄

故障排查

讀完本頁,你就能讀懂命令失敗時 lip 告訴你的內容,找到它的失敗報告,並解決最常見的幾種失敗。

讀懂失敗資訊

命令失敗時,lip 會在終端機裡輸出三樣東西:

text
error: There is no server to run: 'D:\servers\survival\bedrock_server_mod.exe' is not a file, though the workspace has the game bds 1.26.60 with a loader. It may have been deleted or moved by hand. lip does not install a package again that is installed in the same version, so setting up the same versions here does not bring the file back. Restore it from a backup, or run 'lip setup --game 1.26.60 --loader levilamina@26.60.3' in an empty folder and copy the file from there.

Full report: .lip\logs\20261114T201502Z-4120.log
  1. error: 出了什麼問題。如果一個問題是由另一個問題引起的,每個原因會各佔一行,以 caused by: 開頭。
  2. hint: 你可以怎麼辦。提示可能有好幾條,也可能沒有。
  3. Full report: 一個檔案,裡面是 lip 對這次失敗所知道的一切。

先看錯誤和提示。大多數時候這就夠了。

介面會在對話方塊裡顯示同樣的內容:

伺服器頁面上有一個標題為「啟動伺服器 · 失敗」的對話方塊。對話方塊顯示錯誤:沒有可執行的伺服器,因為 bedrock_server_mod.exe 不存在;下面是 .lip\logs 中完整報告的路徑。標註 1 指向錯誤,標註 2 指向報告。

失敗報告

  • 位置: 執行命令時所在資料夾裡的 .lip/logs/。在介面裡,是目前工作區裡的。
  • 名字: 失敗的時間(UTC)加上 lip 處理程序的編號,例如 20261114T201502Z-4120.log。
  • 數量: lip 保留最新的 20 份,更舊的會被刪除。
  • 格式: 純文字。用任何編輯器都能開啟。

一份報告有五個部分:

部分內容
Environment時間、lip 的版本、命令、資料夾、你的系統、設定目錄和快取目錄、命令是否由常駐程式執行,以及已設定的代理伺服器變數。
Error錯誤和提示,與終端機裡顯示的一樣。
Exception錯誤的完整技術細節。
Workspace (.lip).lip 裡有什麼;如果有被中斷的操作,還有它的日誌。
Tracelip 一步步做了什麼:網路請求、考慮過的版本、改動的檔案,以及套件的程式的輸出。

URL 裡的密碼和令牌(例如代理伺服器的)會被取代成 ***。即便如此,分享之前還是請看一遍:裡面有你的資料夾名和套件名。

有些失敗不會寫報告:

  • 命令行寫錯了,例如用了不存在的選項。lip 會說明問題,並加上一句 Run lip --help to see how to use lip.
  • 你取消了命令。 lip 會輸出 Cancelled. Any changes to the workspace were undone.
  • 伺服器執行了一陣後失敗。 lip run 只是把伺服器的結束代碼傳出來,不會加任何東西。請看伺服器自己的輸出。

如果報告本身寫不進去,例如磁碟是唯讀的,lip 會改為在終端機裡輸出其中最重要的部分。

尋求幫助

如果錯誤和提示幫不上忙,請在 https://github.com/LiteLDev/lip/issues 提交 issue,並附上報告。如果某條提示說 This looks like a bug in lip,請務必這樣做:那是我們的問題,不是你的。

另一個 lip 正在變更工作區

text
error: lip cannot take the workspace lock 'D:\servers\survival\.lip\lock': most likely another lip command is changing the workspace 'D:\servers\survival'. Wait for the other lip command to finish, then try again. If no other lip command is running, a program may be holding the lock file open: close it, then try again.

同一時間只能有一條命令變更一個伺服器資料夾。有 lip setup、lip install、lip update 或 lip uninstall 正在那裡工作,或者介面正在那裡應用變更時,第二條命令不會等待:它立刻失敗,什麼都不改。

lip run 也可能這樣失敗。在啟動伺服器之前,以及每次自動重新啟動之前,它都要檢查資料夾裡有沒有被中斷的變更,那一刻它需要同一把鎖。

怎麼辦:

  1. 等另一條命令結束,再執行你的命令。看看其他終端機,如果介面開著也看一下。
  2. 如果沒有 lip 在工作,那就是別的程式開啟著 .lip/lock 檔案。備份工具、同步工具和編輯器都可能這樣做。關掉它再試。

你永遠不需要刪除 .lip/lock。鎖不是這個檔案本身,而是對它的佔用;持有它的 lip 一結束,佔用就自動解除,即使它是當機的。

唯讀的命令(例如 lip list)和所有試執行都不加鎖,絕不會這樣失敗。

檔案被佔用

text
hint: A file is in use by another program. Stop the server and other programs that use the workspace, then try again.

這發生在 Windows 上:執行中的程式會一直開啟它的檔案,誰也沒法取代或刪除它們。最常見的情況是這個程式就是伺服器本身:你在它執行時變更了套件,而 lip 必須取代的檔案屬於執行中的遊戲或已載入的模組。

lip 已經復原了它的變更。工作區和之前一樣。

怎麼辦:

  1. 停止伺服器。 在它的終端機裡按 Ctrl+C,或者在介面的伺服器頁面選擇「停止」。
  2. 關閉其他開啟著該資料夾裡檔案的程式,例如正在編輯設定檔的編輯器。
  3. 重新執行命令。

如果 lip 還說了 Some changes could not be undone,說明某個檔案被佔用得太死,lip 連放回去都做不到。同樣按這三步做。之後在這個資料夾裡的下一次 lip install、lip update、lip uninstall 或 lip setup 會先完成清除,再做別的事。見當機或斷電之後。

介面不會遇到這種情況:工作區的伺服器執行期間,它不變更那裡的套件。

連不上 GitHub

lip 的大多數套件都從 GitHub 下載。提示會告訴你遇到的是哪一類問題:

提示的開頭含義怎麼辦
lip could not reach the server.完全沒有回應:沒有網路,或者 GitHub 被屏蔽、非常慢。檢查網路連線。然後見 GitHub 很慢或被屏蔽時。
The server refused the request, possibly because too many requests were sent.GitHub 或你的代理伺服器限制了下載次數。等幾分鐘再試。
The repository or file does not exist, or is private.名字寫錯了,或者儲存庫不是公開的。檢查名字和版本有沒有拼錯。lip 只從公開儲存庫安裝。
The server had a problem.GitHub 或對方網站出了問題。稍後再試。
A file that <package> <version> publishes is missing from where its package file says it is套件指向的下載地址已經失效。用 <package>@<version> 安裝別的版本,並告訴套件的作者。

如果你設定了 GitHub 代理伺服器,而錯誤資訊說代理伺服器不支援 git 儲存庫,那麼這個代理伺服器做不到 lip 需要的事。用 lip config delete github_proxy 移除它,或者換一個。

介面啟動時會檢查 GitHub。連不上而你又還沒做過選擇時,它會問你是設定代理伺服器、直接連線,還是以後再說。

伺服器無法啟動

lip run 或介面裡的「啟動」在伺服器執行起來之前就失敗了。請在下面找到你看到的資訊。

There is no server to run: this workspace has no game.

這個資料夾還沒有安裝伺服器,或者你進錯了資料夾。進入伺服器資料夾,或者安裝一個:lip setup --game <version>。見安裝伺服器。

A server of the workspace '…' is already running

這個資料夾裡已經有伺服器在執行,而一個資料夾同一時間只執行一個伺服器。找到它,在它所在的地方停止它:

  • 它可能執行在另一個終端機裡,由 lip run 啟動。在那裡按 Ctrl+C。
  • 它可能是託管伺服器,由介面或 lip run --managed 啟動。執行 lip run --managed 接入它,再按 Ctrl+C。或者在介面的伺服器頁面選擇「停止」。

在介面裡,對於不是它啟動、它也控制不了的伺服器,伺服器頁面會顯示在此介面之外執行:比如由普通的 lip run 啟動的伺服器,或者這臺機器上另一個使用者執行的伺服器。介面無法停止它,也無法顯示它的輸出。請在啟動它的地方停止它。

There is no server to run: '…' is not a file

資料夾已經安裝了伺服器,但伺服器的程式不見了。它可能被手動刪除或移走,或者被安全軟體清除了。在這個資料夾裡重新安裝同樣的版本並不能把它找回來:已經安裝的套件,lip 不會再安裝一遍同一個版本。請從備份中恢復這個檔案。沒有備份時,在一個空資料夾裡執行錯誤資訊中給出的 lip setup 命令,再把缺少的檔案從那裡複製到這個資料夾。你也可以乾脆換到那個新資料夾:在那裡安裝你的模組,再把舊資料夾裡的 worlds/、server.properties、allowlist.json、permissions.json 和模組的設定複製過去。

The game of this workspace is the Linux server … which lip runs only on Linux on x64.

到 x64 的 Linux 上執行它,或者改裝 Windows 伺服器:lip setup --game <version> --build windows。見 Linux 與 macOS。

The Microsoft Visual C++ Redistributable was not installed: Windows did not allow its installer to run as an administrator.

Windows 伺服器需要它,而 Windows 詢問時你選了「否」。重新執行命令並允許它,或者自己從 https://aka.ms/vc14/vc_redist.x64.exe 安裝。

Rosetta 2 is not installed

在 Apple 芯片的 Mac 上執行 softwareupdate --install-rosetta --agree-to-license,然後重新執行 lip。

lip run --managed needs the daemon of lip

見 lip 自己執行了命令。

伺服器啟動後又結束了。

這是伺服器自己失敗了,不是 lip。lip run 以伺服器的結束代碼結束,不寫報告。請看伺服器最後輸出的幾行。常見原因有:連接埠被別的程式佔用、世界損壞、某個模組載入失敗。要檢查是不是最後一種,可以解除安裝你最近安裝的模組試試。

如果 restart 是 on-failure 而伺服器一再失敗,lip 在 10 分鐘內重新啟動 5 次後就不再嘗試:

text
⚠ The server exited with code 1. lip restarted it 5 times within 10 minutes, so it does not restart it again. Look at what the server wrote above for why it fails.

常駐程式是另一個版本

lip 的工作是在背景處理程序(常駐程式)裡完成的,第一條命令會啟動它。更新 lip 之後,舊版本的常駐程式可能還在執行。

多數時候你不會察覺。新的 lip 會請舊的常駐程式結束;它空閒時就會結束,然後新的常駐程式啟動。

正忙著的舊常駐程式會留下:它正在執行某條命令,或者正在執行託管伺服器。這時新的 lip 會說:

text
lip could not have its daemon carry out the command (the daemon of lip 0.41.0 that runs carries out a command or runs a managed server); it carries it out itself.

你的命令照樣能完成。想換到新的常駐程式:

  1. 看看在執行什麼:lip daemon status。

    text
    The daemon of lip 0.41.0 runs as process 4120, carrying out 0 commands.
  2. 停止託管伺服器。對每一個,在它的資料夾裡執行 lip run --managed 並按 Ctrl+C,或者在介面裡停止它。為此,lip run --managed 仍然會使用舊的常駐程式。

  3. 執行 lip daemon stop。下一條命令會啟動新的常駐程式。

常駐程式忙碌時,lip daemon stop 會拒絕並說明原因。它絕不會替你停止伺服器。

lip 自己執行了命令

text
lip could not have its daemon carry out the command (<reason>); it carries it out itself.

lip 沒能啟動或連上它的常駐程式,於是改由你啟動的這個處理程序來完成工作。這是一種回退,不是失敗:命令做的事是一樣的。

沒有常駐程式時,有兩點不同:

  • lip run --managed 會失敗。 託管伺服器存在於常駐程式裡。請用普通的 lip run 執行伺服器,或者先解決常駐程式的問題。
  • 介面不能讓伺服器持續執行。 你在介面裡啟動的伺服器,會在你結束介面時停止。結束時介面會告訴你。

括號裡的原因說明了問題所在:

原因怎麼辦
the daemon of lip <version> that runs carries out a command or runs a managed server見常駐程式是另一個版本。
the daemon that lip started did not listen within 10 seconds、the daemon that lip started does not listen常駐程式沒能啟動。重新執行命令。如果一直這樣,請連同 lip daemon status 的輸出一起反饋。
the daemon keeps exiting、the daemon keeps being replacedlip 連線時,常駐程式連續多次結束或被取代。同時使用兩個版本的 lip 時會這樣。只用一個版本,再重新執行命令。
系統給出的資訊,例如拒絕訪問在 Linux 和 macOS 上,檢查你能否寫入套接字所在的目錄:$XDG_RUNTIME_DIR/lip;該變數未設定時是 ~/.local/state/lip。

另一條不同的資訊 lip: the daemon ended before the command did. 表示常駐程式在為你工作時被殺掉了。重新執行命令。如果它當時正在變更工作區,那裡的下一條命令會先做清除。

當機或斷電之後

如果 lip 在命令變更伺服器資料夾的過程中被殺掉,或者機器斷電,這次變更就停在了一半。lip 對此有準備。變更檔案之前,它會先把這次變更記在 .lip/journal 裡,並把每個檔案的舊版本留在旁邊,直到整條命令做完。

你不需要做什麼特別的事。在那個資料夾裡的下一次 lip setup、lip install、lip update、lip uninstall 或 lip run 會先把事情理順,並告訴你是哪種情況:

text
⚠ A lip operation on this workspace was interrupted (it started at <time>); undid its <n> changes. The workspace and its state file are as they were before it.

被中斷的命令還沒做完,所以 lip 把它撤回了。請重新執行那條命令。

text
Finished an interrupted lip operation that had completed (it started at <time>): deleted the backups it left.

被中斷的命令只差清除沒做,所以 lip 替它做完了。不需要重做什麼。

如果 lip 沒法把某個檔案放回去,例如伺服器正開啟著它,lip 會失敗、列出這些檔案,並保留日誌。停止伺服器和使用該資料夾的程式,再執行上述任意一條命令。它會從停下的地方繼續。

DANGER

不要刪除 .lip/journal;日誌還在的時候,也不要刪除伺服器資料夾里名為 .<名字>.bak 的檔案。lip 要靠它們來恢復。

試執行,以及介面在你應用之前顯示的計劃,只會提到有操作被中斷。它們不會修復它。

清除快取

lip 把下載的東西放在快取裡,這樣同一個檔案不會下載兩次。快取只是為了省時間。刪掉它不會丟失任何東西。

sh
lip cache clean
text
✓ Cache cleaned successfully.

這些時候可以清除:

  • 需要磁碟空間。 遊戲的下載檔案很大。
  • 某個下載似乎壞了,同一個安裝一再失敗。lip 本來就會取代快取裡不是有效 ZIP 壓縮檔的檔案,所以很少需要這樣做。

別的 lip 命令正在下載時不要清除:那條命令可能會失敗。之後重新執行它即可。

你的伺服器、你的設定和 lip 的 Wine 都不在快取裡,不受影響。在介面裡,同樣的功能是設定頁面的「清除快取」。

其他資訊

提示怎麼辦
lip is not allowed to access a file.檢查檔案是不是唯讀的,以及你的使用者能否寫入伺服器資料夾。
The disk is full.騰出一些空間(例如用 lip cache clean),然後再試。
A hook command of a package failed.某個套件在安裝或移除過程中執行的程式失敗了。它的輸出在錯誤資訊上方,也在報告的 Trace 部分。這是套件的問題:請向套件的作者反饋。
Run lip in an interactive terminal.lip 需要問你一些事,但它的輸入或輸出不是終端機,問不了。如果是 Minecraft EULA,請加上 --accept-eula。
The game of this workspace is <version>, with LeviLamina <version>; lip install does not change them.你要安裝的套件與你的遊戲或載入器不兼容。錯誤資訊會指出是哪些。請安裝它們的其他版本,或者變更遊戲:見變更遊戲版本。
Request other versions of the packages named above, or install fewer of them together.你要安裝的套件彼此不兼容。錯誤資訊會指出是哪些。請安裝它們的其他版本,或者少裝幾個。

檔案都在哪裡

知道 lip 把東西放在哪裡,有助於查找問題。

內容位置
你的伺服器:遊戲、世界、server.properties、模組伺服器資料夾本身
lip 對這個資料夾的瞭解:已安裝的套件、鎖、日誌、失敗報告、Wine 前綴、工作區設定伺服器資料夾裡的 .lip/。在 Windows 上是隱藏的。
你的設定Windows 上是 %APPDATA%\lip,其他系統上是 ~/.config/lip
快取Windows 上是 %LOCALAPPDATA%\lip\Cache,其他系統上是 ~/.cache/lip
lip 的 WineLinux 和 macOS 上是 ~/.local/share/lip
介面的工作區清單Windows 上是 %LOCALAPPDATA%\lip\State,其他系統上是 ~/.local/state/lip

每個檔案和目錄的說明見檔案和目錄。