# 故障排除

[[目錄]]

# 讀取錯誤日誌

如果您在面板中遇到意外錯誤,您可能會被要求的第一件事是日誌。 要檢索這些內容,只需執行以下命令,該命令將輸出面板日誌檔案的最後 100 行。

tail -n 100 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log

# 解析錯誤

當您運行上面的命令時,您可能會遇到一堵巨大的文字牆,這可能會嚇到您。不要害怕, 這只是導致錯誤原因的堆疊跟踪,實際上您可以在以下情況下忽略幾乎所有內容: 尋找錯誤原因。讓我們來看看下面的一些範例輸出,它已被截斷為 使這更容易遵循。

#70 /srv/www/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#71 /srv/www/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#72 {main}
[2018-07-19 00:50:24] local.ERROR: ErrorException: file_put_contents(/srv/www/storage/framework/views/c9c05d1357df1ce4ec8fc5df78c16c493b0d4f48.php): failed to open stream: Permission denied in /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_put_conten...', '/srv/www/vendor...', 122, Array)
#1 /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/srv/www/storag...', '<?php $__env->s...', 0)
#2 /srv/www/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php(122): Illuminate\Filesystem\Filesystem->put('/srv/www/storag...', '<?php $__env->s...')
#3 /srv/www/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(51): Illuminate\View\Compilers\BladeCompiler->compile('/srv/www/resour...')
#4 /srv/www/vendor/laravel/framework/src/Illuminate/View/View.php(142): Illuminate\View\Engines\CompilerEngine->get('/srv/www/resour...', Array)
#5 /srv/www/vendor/laravel/framework/src/Illuminate/View/View.php(125): Illuminate\View\View->getContents()

您要做的第一件事就是沿著數字鏈向上移動,直到找到 #0 ,這將是函數 觸發了異常。在第 0 行上方,您將看到一行括號中包含日期和時間,[2018-07-19 00:50:24] 以上為例。該行將是人類可讀的異常,您可以使用它來了解出了什麼問題。

# 了解錯誤

在上面的例子中我們可以看到實際的錯誤是:

local.ERROR: ErrorException: file_put_contents(...): failed to open stream: Permission denied in /srv/www/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122

從這個錯誤我們可以確定執行 file_put_contents() (opens new window) 呼叫時出錯,錯誤是 由於權限被拒絕,我們無法開啟該檔案。如果你根本不懂這個錯誤也沒關係,但是 如果您能夠提供這些日誌,並且至少找到錯誤的根源,它確實可以幫助您獲得更快的支援。 有時錯誤非常簡單,會告訴您到底出了什麼問題,例如 ConnectionException 當面板無法連接到守護程式時拋出。

# 使用 GREP

如果您試圖快速解決一堆錯誤,您可以使用下面的命令,該命令將返回的結果限制為僅 是實際的錯誤行,沒有所有的堆疊追蹤。

tail -n 1000 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | grep "\[$(date +%Y)"

# 無法連線到伺服器錯誤

# 基本偵錯步驟

  • 檢查 Wings 是否正在運行,且沒有報告錯誤。使用 systemctl status wings 檢查目前狀態 的過程。
  • Ctrl + Shift + J(在 Chrome 中)或 Cmd + Alt + I(在 Safari 中)檢查瀏覽器的控制台。如果有 如果其中出現紅色錯誤,則很可能會縮小潛在問題的範圍。
  • 確保 Wings 已正確安裝並且活動配置與下方顯示的配置相符 面板中的 Admin -> Node -> Configuration
  • 檢查防火牆上的 Wings 連接埠是否已開啟。 Wings 使用連接埠 80808443 進行 HTTP(s) 流量, 2022 用於 SFTP 流量。
  • 確保您已為您的 Panel 和 Wings 網域停用 AdBlock 或將其列入白名單。
  • 檢查面板是否可以使用面板上配置的網域存取 Wings。運行“捲曲” https://domain.com:8080` 在 Panel 伺服器上並確保它可以成功連接到 Wings。
  • 確保您的 Panel 和 Wings 使用正確的 HTTP 方案。如果面板透過 HTTPS 運行 Wings 還需要在 HTTPS 上運作。
  • 如果對 Wings 使用 HTTPS,請確保憑證尚未過期。

# 更進階的偵錯步驟

  • 停止 Wings 並執行 wings --debug 以查看是否有任何錯誤輸出。如果是這樣,請嘗試手動解決它們, 或聯絡 Discord (opens new window) 尋求更多協助。
  • 檢查您的 DNS 並確保您收到的回應是您使用 nslookupdig 等工具所期望的回應。
  • 如果您使用 CloudFlare,請確保您的 Wings 或面板 A 記錄停用橘色雲。
  • 確保在防火牆後面使用 Wings(pfSense、OpenSwitch 等)時,存取的 NAT 設定正確 Wing 的外部網路連接埠已設定。
  • 如果到目前為止沒有任何效果,請檢查您自己的 DNS 設定並考慮切換 DNS 伺服器。
  • 在一台伺服器上執行面板和 Wings 時,如果在 /etc/hosts 中新增一個指示的項目,有時會有所幫助 公共IP返回到伺服器。有時還需要反向路徑,因此您可能需要向您的 伺服器 /etc/hosts 檔案將面板的網域指向正確的 IP。
  • 當使用相同轉接器在不同的虛擬機器上執行 Wings 和麵板時,請確保虛擬機器可以連接到每個虛擬機 其他。可能需要混雜模式。

# 無效 MAC 異常

::: 警告 如果您正確遵循我們的安裝和升級指南,則永遠不會發生此錯誤。我們唯一的時間 當您盲目地從備份中還原面板資料庫並嘗試使用新的資料庫時,您可能會遇到此錯誤。 面板的安裝。

恢復備份時,您應該_始終_恢復 .env 檔案! :::

有時,在使用面板時,您會意外地遇到損壞的頁面,在檢查日誌時您會看到 解密時提到無效 MAC 的異常。此錯誤是由 .env 檔案中的 APP_KEY 不符所引起的 資料何時被加密與何時解密。

如果您看到此錯誤,唯一的解決方案是從 .env 檔案中還原 APP_KEY。如果你已經失去了它 原始密鑰沒有辦法恢復遺失的資料。

# SELinux 問題

在安裝了 SELinux 的系統上,執行 redis 或嘗試連線時可能會遇到意外錯誤 到守護程式來執行操作。這些問題通常可以透過執行以下命令來解決 這些程式可以與 SELinux 一起使用。

# Redis 權限錯誤

audit2allow -a -M redis_t
semodule -i redis_t.pp

# Wings 連線錯誤

audit2allow -a -M http_port_t
semodule -i http_port_t.pp

# 容器沒有網路?可能是DNS問題!

現在 Wings 已成功運行,並且您已在“節點”頁面上獲得了綠色心形,“/etc/pterodactyl/config.yml”中的 Wings 配置將具有新值。 這些值之一是 DNS,預設為 1.1.1.1 和 1.0.0.1 如果您使用的主機封鎖 Cloudflare DNS,則必須使用不同的 DNS 伺服器;通常與您的主機系統所使用的相同。 您可以透過多種方式查看主機使用的 DNS 伺服器,具體取決於作業系統處理網路的方式。如果其中一種不起作用,請嘗試另一種。

# Network Manager (This will show both your IPV4 DNS and IPV6 DNS Servers in case you want to add the IPV6 DNS Server(s) from your host to your Wings Config as well.
nmcli -g ip4.dns,ip6.dns dev show
# Resolve-CTL (Newer Versions of Ubuntu)
resolvectl status
# Raw file locations that may have your host system's DNS Servers for various distributions
/etc/resolv.conf
/etc/network/interfaces

如果這會傳回與 1.1.1.1 和 1.0.0.1 不同的 DNS 伺服器,您需要編輯 Wings 'config.yml' 檔案以使用從命令傳回的 DNS 伺服器。如果除了 IPV4 DNS 伺服器之外,您還看到類似 IPV6 位址的輸出,請確保將其放入 IPV6 部分而不是 IPV4 部分。需要明確的是,如果您必須使用預設以外的 DNS 伺服器,請確保從 Wings 配置中刪除 1.1.1.1 和 1.0.0.1;不要只是新增伺服器,還要取代舊伺服器。

# 安排故障排除

  • 檢查佇列管理器的日誌journalctl -xeu pteroq
  • 重新啟動 pteroq systemctl restart pteroq
  • 清除計劃快取php /var/www/pterodactyl/artisan schedule:clear-cache
  • 檢查你的 php 版本 ``php -v - this page (opens new window) 會告訴你哪些版本的面板支援哪些版本的 php
  • 使用 https://crontab.guru 檢查你的 crontab 語法 - 確保它是你想要的
  • 驗證問題是與計劃有關,而不是與您設定的任務有關(將計劃中的第一個任務設定為您知道會在控制台中列印訊息的內容,即執行 say test in the console for a Minecraft server, if the text "test" shows up in the console successfully, set the first task to say test,以便您知道它是否運行
  • 你的任務有點偏離嗎?確保您使用的是最新版本的面板?在版本 1.11.5 中,修正了計劃在錯誤時間運行的問題。或者,您可能設定了錯誤的時區。確保您的時區全部符合。
  • 系統時區timedatectl
  • 面板時區nano /var/www/pterodactyl/.env
  • Wings 時區(作為 TZ 環境變數傳遞給容器,與計劃無關,但在檢查時區時也可以設定它) nano /etc/pterodactyl/config.yml
  • 檢查儲存時間表的資料庫 - 預設為 MariaDB
  • systemctl status mariadb - if it's not active, journalctl -xeu mariadb
  • 檢查佇列處理程序 - 預設為 Redis
  • systemctl status redis - if it's not active, journalctl -xeu redis (On some distributions the service will be named redis-server 取代)
  • 檢查面板錯誤​​tail -n 150 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | nc pteropaste.com 99``

# FirewallD 問題

如果您使用的是安裝了 firewalld 的 RHEL/CentOS 伺服器,則您可能已損壞 DNS。

firewall-cmd --permanent --zone=trusted --change-interface=pterodactyl0
firewall-cmd --reload

執行後重新啟動 dockerwings 以確保套用規則。