畫面卡在同一句英文,不管重新整理、清瀏覽器快取都沒用:Briefly unavailable for scheduled maintenance. Check back in a minute. 換一台裝置、另開一個瀏覽器再連上網站,看到的還是同一頁——更麻煩的是想登入後台查看狀況,/wp-admin 也被同一頁擋住,前台後台一起鎖死。
這個畫面有個正式名字,叫 WordPress 維護模式,是 WordPress 每次更新核心、外掛或佈景主題時,自動幫網站掛上的一塊暫停告示牌,通常在更新跑完的瞬間就會自動拿下,訪客多半不會察覺網站曾經停過。真正麻煩的是它停滯不動的時候,告示牌掛著沒拿下來,網站看起來像永久停擺,而「刪掉一個檔案」這句話本身,沒有講清楚這個檔案原本在做什麼、為什麼會被留在原地、刪完之後是不是就真的沒事了。
這塊告示牌之所以會卡在原地,多半是更新流程走到一半被打斷,找到那個沒被清掉的檔案,才是真正解開畫面的關鍵。
前後台同時鎖住的維護頁面
WordPress 官方文件把這個畫面的內容原文寫得很直白:「Briefly unavailable for scheduled maintenance. Check back in a minute.」翻成中文大致是「網站因排程維護暫時無法使用,請稍後再回來看看」。這句話本身沒有任何錯誤代碼,也沒有紅色警示,因為它根本不是出錯訊息,而是 WordPress 自己主動印出來的一段話,代表核心程式仍在正常運作,只是被自己設下的一個旗標攔住,不讓任何請求繼續往下跑。
前台後台會同時被鎖住,原因藏在 WordPress 載入流程的順序裡。這個檢查發生在網站啟動的極早期階段,只要判定目前處於維護狀態,就會立刻中止其餘所有載入動作,而這個時間點比 wp-admin 驗證帳號密碼的程式碼還早執行,後台登入頁根本還沒機會跑起來,自然跟前台一起被擋在門外。換句話說,這不是後台單獨出了什麼問題,而是整個網站的請求在還沒被分流成「前台」或「後台」之前,就已經被攔截下來。
這也是判斷是不是這個問題最快的依據,如果畫面是一片空白,或跳出「這個網站發生嚴重錯誤」這類訊息,那多半是程式出錯,例如 PHP 錯誤或外掛衝突,跟這裡講的維護模式是兩回事。WordPress 官方文件也把「更新後卡在維護模式」、「空白畫面死亡」、「嚴重錯誤訊息」列為三種原因與外觀都不同的常見問題。真正的 WordPress 維護模式,看到的一定是那句完整、措辭正常的英文句子,不會有任何錯誤字樣。

更新中斷會在網站根目錄留下一個隱藏檔案
常見的處理方式,是把 .maintenance 這個檔案刪掉就好,但這個說法沒有解釋這個檔案原本是做什麼用的、為什麼會被留在那裡。實際上,.maintenance 是 WordPress 在每一次更新開始的當下,自己在網站根目錄建立的一個「進行中」標記,裡面存的內容很單純,就是一段記錄這次更新是什麼時候開始的時間戳記,不是什麼複雜的設定檔。正常情況下,更新跑完的最後一步就是把這個檔案刪掉,訪客連感覺都不會有;沒能解除的狀況,說白了就是流程走到一半,還沒走到刪掉標記那一步就被中斷了。

容易被忽略的一點是,WordPress 核心其實內建了一套逾時判斷,理論上這個標記存在超過一段時間,系統就會自己不理它,只要檔案的時間戳記顯示是 10 分鐘以前建立的,WordPress 就會直接當作維護已經結束,不管檔案還在不在。這聽起來應該能自動解套,但實務上不少人畫面停留的時間還是遠比 10 分鐘更久,原因不在這個逾時邏輯本身失效,而是別的因素讓標記不斷被重新觸發,或是畫面被瀏覽器快取住看起來像沒解除。這個矛盾正是接下來要拆開講的 3 種常見成因。
全部外掛一次更新,把鎖定範圍拉長到整批處理完成
最常見的一種情況,跟一次點全部更新還是一款一款分開更新有關,兩者在鎖定範圍上其實落差不小。批次更新外掛時,維護模式是在整個更新迴圈外層開啟一次,要等所有外掛都跑完這個迴圈,才會在最後解除一次,也就是說,按下「全部更新」的那一刻,鎖定範圍就從第一款外掛開始生效,得等到清單裡最後一款也處理完,才會真正解鎖。只要中間任何一款更新失敗、逾時或卡在半路,迴圈就走不到最後解除鎖定那一步,.maintenance 檔案自然被留在原地。
相對地,只更新單一外掛時,鎖定的範圍窄得多,只包住那一款自己的安裝流程,跟其他外掛完全無關。這剛好能解釋不少人共同的困惑,平常點單一外掛更新從沒出過問題,偏偏「全部更新」按下去就卡在維護頁走不下去,不是運氣不好,而是批次更新本身的鎖定設計就是把風險視窗拉長到整批處理完成為止,只要清單裡有一款外掛特別大、跟主機不合,或本身有問題,就足以拖累整批。
更新途中關閉分頁或網路連線中斷
另一種常見情況,跟連線穩定度有關。WordPress 官方文件明確把更新過程中網路連線出問題,列為造成自動升級失敗的原因之一,實際的失敗症狀包括畫面整片空白、跳出更新失敗的警告,或直接顯示一段 PHP 錯誤訊息。更新這種動作要下載檔案、解壓縮、覆蓋掉舊版本,有時還牽動資料庫的調整,整個流程是連續的,中途只要網路斷線,或以為關掉分頁就等於取消動作而提早離開畫面,伺服器那端的流程並不會因此乾淨地停下來,反而可能停在一個尷尬的中間點。
這也解釋了為什麼這類中斷特別容易剛好卡在維護模式那一步:鎖定是在更新一開始就啟動,解除鎖定卻排在整段流程的最後,中斷點落在已經開始鎖定、還沒走到解除鎖定這段區間的機率本來就偏高。實務上比較保險的做法是更新開始後留在畫面上,等它明確跑完再離開,不要假設分頁一關就等於安全停止。
主機資源不足會讓清除動作中途停止
還有一種更技術性的成因,跟主機資源的限制有關。更新流程要在有限的時間內完成下載、解壓縮、覆蓋檔案,有時還要跑資料庫調整,這些步驟全部要吃掉 PHP 執行環境分配到的記憶體與執行時間額度。額度一旦用盡,PHP 會直接中止這次請求,後續程式碼不會再被執行,而把 .maintenance 檔案刪掉正好排在整段更新流程的最後一步,額度用盡時最容易卡在這一步之前,前面該做的檔案覆蓋都已經完成,唯獨收尾這個小動作沒能跑到。
官方文件在同一份失敗原因清單裡,也把檔案權限不正確列為升級失敗的另一個原因,性質上算是同一類收尾失敗,都是伺服器沒有足夠權限正常寫入或刪除檔案,結果一樣是清除標記這個動作跑不完,.maintenance 留在原地,畫面持續顯示維護頁。
用 FTP 或檔案管理員刪除殘留的維護檔案
確認是這個問題之後,實際解法只有一件事,把根目錄裡那個 .maintenance 檔案刪掉。官方步驟原文寫得很簡短:「Log in to your website using your FTP program」「Delete the .maintenance file, which will be found in your site root.」聽起來像一句話就能解決,但實際動手時,有 3 個細節最容易讓人一頭霧水:檔案放在哪一層、為什麼平常在檔案總管裡找不到它、刪除之後畫面是立刻恢復還是要再等一下。

檔案位置在網站根目錄,不是 wp-content 資料夾
這裡最容易搞錯的,是把位置以為在 wp-content 資料夾底下,結果怎麼找都找不到。官方原文把「網站根目錄」定義得很明確,指的是包含 wp-admin 資料夾的那個目錄,也就是跟 wp-config.php、wp-admin、wp-content 這幾個平行並列的那一層,.maintenance 就跟它們放在一起,不必進到 wp-content 裡面找。
判斷方法很簡單,用 FTP 連上主機後,先確認畫面上看不看得到 wp-config.php 這個檔案,看得到就代表現在所在的位置正確,.maintenance 一定就在同一層,不會跑到更下面的子資料夾裡。
開啟隱藏檔案顯示才找得到這個檔案
就算站對了位置,還是有一個環節容易讓人找不到方向,.maintenance 這個檔名以一個點開頭,而多數 FTP 軟體與主機內建的檔案管理員,預設都會把這種以點開頭的檔案當成系統隱藏檔,直接不顯示出來。這不是 WordPress 特有的機制,而是一般檔案總管軟體的通則行為,不管用哪一套工具,只要檔名以點開頭,預設清單裡通常就是看不到。
要找到它,得先在自己用的 FTP 軟體或主機檔案管理員裡,找到「顯示隱藏檔案」這個設定選項打開。不同軟體的位置不太一樣,有的在檢視選單裡,有的要進到偏好設定,但概念都一樣,打開這個選項之前,.maintenance 對這套工具來說根本不會出現在畫面上,並不是檔案真的不見了。
刪除後,下一次連線就會恢復正常
刪除動作本身不需要任何額外步驟收尾。WordPress 判斷是否處於維護模式的檢查,是每一次請求都即時執行一遍,直接確認這個檔案存不存在,不是靠背景排程或快取結果來判斷。這代表刪除 .maintenance 之後,不必等待特定的秒數,也不需要重新啟動主機上的任何服務,下一次有任何人、任何裝置連進網站,這個檢查就會立刻判定為不在維護中,畫面自然恢復正常。
如果刪除之後過了一段時間畫面還是卡在維護頁,通常代表根目錄裡其實還有另一個 .maintenance 檔案沒被清乾淨,例如透過檔案管理員的搜尋功能只找到一份、實際上還有其他路徑存在同名檔案,或是刪除操作本身沒有真的送出,值得重新整理一次檔案列表,確認檔案真的已經不在了。
畫面恢復正常,不代表更新真的已經跑完
畫面恢復正常之後,還有一件事容易被忽略,刪除 .maintenance 只是解除鎖定畫面這個症狀,不代表原本那次更新真的順利跑完。如果中斷得早,核心、某個外掛,或佈景主題很可能還停在舊版本,甚至檔案只被覆蓋了一半。
官方文件寫得很直接:「The automatic upgrade should be executed again, just in case it failed.」意思是刪除檔案之後應該重新執行一次自動升級,以防原本那次真的失敗了,換句話說,官方自己也認為這件事還沒真正結束。
重新執行一次更新,收尾原本沒跑完的流程
官方那句建議可以具體化成一個可以照做的動作,確認畫面恢復正常之後,回到後台把原本要更新的那一項,或那一批,重新點一次更新,讓流程真正走到最後一步,而不是刪完檔案就當作事情結束了。這個動作幾乎不會有額外風險,如果上一次其實已經更新成功,只是清除標記那一步沒跑完,重新點一次頂多是重複執行,系統會判斷版本已經是最新的;如果上一次真的沒跑完,這一次才是真正讓外掛、主題或核心走完整個安裝流程的機會。
跳過這一步,最常見的後果是網站表面上看起來一切正常,實際上某個外掛版本停在半路,功能少了一角,或跟其他外掛的相容性出問題,卻要等到某天真的出錯才被發現。
檢查外掛、佈景主題與核心版本是否真的升級成功
確認的方法不需要任何額外工具,回到熟悉的三個地方比對版本號就好:外掛列表頁,每一款外掛旁邊都會標示目前的版本;佈景主題列表頁同樣有版本欄位;WordPress 儀表板首頁則會顯示目前核心的版本。把這幾個數字跟原本要更新到的目標版本對一遍,只要有任何一項版本號沒有變動,就代表那一項在中斷發生時其實沒有真的完成安裝,不是只有畫面停滯而已。
這一步值得養成習慣,而不只是這次事故才做。批次更新之後,不管中途有沒有停在維護頁過,花一分鐘核對版本號,能提早抓到畫面看起來正常、其實某個項目沒更新到這種悄悄發生的落差。
維護檔案又重新出現,代表背後還有更新程序在跑
另一種情況是刪除之後隔一段時間再打開網站,又看到同一頁維護畫面。.maintenance 是由每一次更新流程各自建立與刪除的,會反覆出現通常代表背後有更新程序被反覆觸發,常見的情境是網站本身開著核心或外掛的自動更新排程,跟剛才的手動操作前後夾在一起,兩邊搶著寫入同一個檔案;也可能是某個外掛本身在背景執行時間較長的資料庫調整工作,每次執行都重新觸發一次鎖定。
遇到這種情況,與其反覆手動刪除同一個檔案,更值得先確認有沒有背景的自動更新排程正在運作,等它跑完,或先暫時關閉自動更新,再重新走一次完整的更新流程,避免兩邊互相干擾,沒完沒了地重複鎖定又解鎖。
刪除後出現白畫面或嚴重錯誤,已經是另一個問題
如果刪除 .maintenance 之後,畫面從維護頁變成一片空白,或跳出「這個網站發生嚴重錯誤」這類訊息,代表原本那次更新已經造成檔案損毀或外掛衝突,這已經不是卡在維護模式,而是更新沒跑完、網站真的掛了的另一個情境。前面提過,WordPress 官方文件把「更新後卡在維護模式」、「空白畫面死亡」、「嚴重錯誤訊息」列為三種成因與外觀都不同的常見問題,遇到後兩種,需要的是逐一停用外掛排查、檢查除錯紀錄這類另一套排查方式。
先把這條界線畫清楚很重要,很多人會把畫面壞掉一律當成同一件事處理,結果套錯排查方法白花時間。維護模式的畫面是 WordPress 主動印出來的完整句子,白畫面或嚴重錯誤訊息則是程式真的出錯,分清楚是哪一種,才知道下一步該往哪個方向查。
養成三個習慣,降低卡在維護模式的機率
前面拆解過 3 種常見的中斷成因:批次更新拉長鎖定範圍、連線中斷、主機資源用盡。這三個成因各自對應一個可以提前做的預防習慣,不必等到真的卡在維護頁才手忙腳亂處理。
更新前應先備份資料庫與檔案
WordPress 官方在升級指南裡明確建議,動手之前先備份網站,萬一過程中出狀況,才有辦法把網站還原回更新之前的狀態。具體做法包含備份資料庫、備份所有檔案,含 .htaccess 這種容易被忽略的設定檔,而且備份完成後最好實際驗證一次備份檔案真的可以還原,不要等到需要用的那一刻才發現備份本身是壞的。
這個習慣的價值不只在維護模式這件事上,就算這次更新完全沒有卡在維護頁,備份也是任何一次核心、外掛或主題更新前都該做的基本功,差別只在於平常沒出事就感覺不到它的重要性。
更新進行中應避免關閉分頁或讓裝置休眠
對應前面提到的連線中斷成因,這個習慣做法很直接,更新開始之後留在畫面上等它跑完,不要因為畫面看起來沒動靜就切去做別的事、把分頁關掉,或讓筆電進入休眠導致網路連線中斷。官方文件已經把連線問題列為升級失敗的已知原因之一,維持連線穩定是直接針對這個風險因子做的預防,成本很低,卻能省下事後排查的時間。
尤其是外掛或主題檔案比較大、網路環境本來就不太穩定,例如用行動熱點連線的情況,更新過程拉長的時間也跟著變長,中途被打斷的機率自然更高,這種情境下更值得耐心留在畫面上確認跑完。
外掛與佈景主題應該分開分批更新
第三個習慣,是把外掛與佈景主題分開分批更新,而不是一次點下「全部更新」:更新一批之後,先確認畫面正常、版本號也真的變成新的,再進行下一批。這麼做的效果是讓每一次鎖定的範圍都限縮在一小批之內,萬一其中一款出狀況,受影響的範圍也只有那一批,不會拖累整份清單。
官方升級指南裡也有類似的措辭,建議針對外掛清單一款一款處理,並且逐一檢查過程中跳出的任何警告或錯誤訊息,而不是把一長串更新項目一口氣按下去、等結果自己出來。外掛數量不多的網站或許感受不明顯,但外掛數量一多、更新頻率一高,分批處理帶來的風險控管差異就會愈來愈明顯。
WordPress 維護模式本身不是網站故障,而是更新流程裡一個原本該一閃而過的暫停動作,只是遇上中斷,才變成擋在前後台之間的一道牆。找到那個藏在根目錄裡的隱藏檔案、把它刪掉,通常幾秒鐘就能讓畫面恢復;真正決定這次事故有沒有留下後遺症的,反而是刪除之後有沒有回頭確認更新真的跑完。下一次更新前多花一分鐘備份、分批處理清單裡的項目,大概就是讓這道牆不再無預警擋住路的最實際做法。
