Chuyện gì đang xảy ra
Mỗi lần cập nhật WordPress — dù là core, plugin hay theme — đều bắt đầu bằng việc tạo một file ẩn tên .maintenance trong thư mục gốc của website. Khi file này tồn tại, WordPress sẽ hiển thị trang thông báo cho khách truy cập thay vì để họ thấy một trang đang cập nhật dở dang, có thể gây lỗi.
Trong điều kiện bình thường, WordPress sẽ tự xóa .maintenance ngay khi quá trình cập nhật hoàn tất. Nhưng nếu quá trình cập nhật bị timeout, thất bại giữa chừng, hoặc bạn đóng tab trình duyệt quá sớm, file này sẽ còn lại. Website của bạn bị kẹt với thông báo:
Briefly unavailable for scheduled maintenance. Check back in a minute.
Cách sửa? Xóa file đó đi. Không cần làm gì thêm.
Cách 1: Xóa .maintenance qua FTP/SFTP (nhanh nhất)
Mở FTP client của bạn — FileZilla, Cyberduck, Transmit, hay bất kỳ phần mềm nào bạn dùng — rồi kết nối vào server. Điều hướng đến thư mục gốc của WordPress, tức thư mục chứa file wp-config.php.
File ẩn mặc định không hiển thị. Bật tùy chọn hiển thị file ẩn trước:
- FileZilla: Server → Force Showing Hidden Files
- Cyberduck: View → Show Hidden Files
Bạn sẽ thấy file .maintenance nằm ở đó. Xóa nó đi. Tải lại website — trang sẽ hoạt động trở lại ngay lập tức.
Cách 2: Xóa qua SSH
# Đi đến thư mục gốc WordPress
cd /var/www/html
# (điều chỉnh đường dẫn cho phù hợp với cấu hình server của bạn)
# Xác nhận file có tồn tại không
ls -la | grep maintenance
# Xóa file
rm .maintenance
Kiểm tra lại xem đã xóa chưa:
ls -la | grep maintenance
# Không có kết quả = đã xong
Cách 3: Xóa qua cPanel File Manager
- Đăng nhập vào cPanel → File Manager
- Điều hướng đến thư mục gốc WordPress (thường là
public_html) - Nhấp Settings (góc trên bên phải) → tích vào Show Hidden Files → Save
- Tìm file
.maintenance, nhấp chuột phải → Delete
Cách 4: Dùng WP-CLI
Có WP-CLI rồi? Một lệnh là xử lý xong:
wp maintenance-mode deactivate
Lệnh này sẽ xóa file .maintenance và đồng thời kiểm tra xem WordPress có đang ở chế độ bảo trì thông qua cơ chế nào khác không — toàn diện hơn so với việc xóa thủ công.
Nếu file không tồn tại nhưng lỗi vẫn còn?
Kiểm tra ba nguyên nhân sau trước khi đào sâu hơn.
Cache đang phục vụ trang bảo trì cũ
Cloudflare, WP Rocket, W3 Total Cache, và hầu hết các cache cấp hosting đều có thể tiếp tục hiển thị trang bảo trì cho mọi khách truy cập — dù bạn đã xóa file rồi. Hãy xóa toàn bộ cache:
- Cloudflare: Dashboard → Caching → Purge Everything
- WP Rocket: Dashboard → Clear Cache
- Kiểm tra nhanh: thêm
?nocache=1vào URL để bỏ qua cache và xem trạng thái thực của website
Một plugin đang bật chế độ bảo trì
Các plugin như SeedProd, WP Maintenance Mode, và Coming Soon Page có công tắc bảo trì riêng — hoàn toàn tách biệt với file .maintenance. Nếu /wp-admin vẫn truy cập được, hãy kiểm tra cài đặt của các plugin đó và tắt chế độ bảo trì ở đó.
Nếu wp-admin cũng bị chặn, hãy thêm dòng này vào wp-config.php tạm thời:
define('WP_MAINTENANCE', false);
Dòng này sẽ vô hiệu hóa chế độ bảo trì từ plugin để bạn có thể truy cập lại. Hãy xóa nó sau khi đã sửa xong cài đặt plugin.
Quá trình cập nhật không hoàn tất để lại trạng thái lỗi
Sau khi xóa file .maintenance, vào wp-admin → Dashboard → Updates và chạy lại thủ công bất kỳ mục nào bị thất bại. Nếu cùng một bản cập nhật cứ thất bại mãi, nhiều khả năng bạn đang bị giới hạn PHP timeout hoặc memory limit. Hãy bật debug logging trong wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
Sau đó kiểm tra file wp-content/debug.log — lỗi thực sự sẽ được ghi ở đó.
Kiểm tra lại
- Mở website trong cửa sổ riêng tư/ẩn danh (bỏ qua cache trình duyệt)
- Trang chủ phải tải bình thường
- Đăng nhập vào
/wp-adminvà xác nhận các bản cập nhật đang chờ đã hoàn tất hoặc được xếp vào hàng chờ để chạy lại - Qua SSH hoặc FTP: kiểm tra lại lần nữa rằng file
.maintenancekhông còn tồn tại trong thư mục gốc WordPress
Phòng ngừa
File .maintenance bị bỏ lại hầu như luôn do PHP timeout trong quá trình cập nhật lớn. Một vài thói quen sau sẽ loại bỏ vấn đề này:
- Tăng
max_execution_timelên ít nhất 300 giây. Trong.htaccess:php_value max_execution_time 300. Trongphp.ini:max_execution_time = 300. - Cập nhật plugin từng cái một. "Update All" chạy tuần tự trong một request từ trình duyệt — chỉ cần một plugin chậm là có thể làm timeout cả loạt.
- Dùng WP-CLI hoặc MainWP để cập nhật hàng loạt trên các website lớn. Chúng xử lý timeout tốt hơn nhiều so với trình cập nhật qua trình duyệt.
- Sao lưu trước mỗi lần cập nhật, không có ngoại lệ. UpdraftPlus và BackWPup đều cung cấp tính năng tạo snapshot trước khi cập nhật chỉ với một cú nhấp.

