Fix WordPress Stuck in Maintenance Mode: 'Briefly unavailable for scheduled maintenance'

beginner๐Ÿ“ WordPress2026-03-25| WordPress 4.xโ€“6.x, any hosting (shared, VPS, Cloudflare, WP Engine, cPanel)

Error Message

Briefly unavailable for scheduled maintenance. Check back in a minute.
#wordpress#maintenance#update#.maintenance-file#wp-admin

What's happening

Every WordPress update โ€” core, plugin, or theme โ€” starts by creating a hidden file called .maintenance in your site's root directory. While that file exists, WordPress shows visitors a holding page instead of a half-updated, potentially broken site.

Under normal conditions, WordPress deletes .maintenance the moment the update finishes. But if the update times out, fails mid-way, or you close the browser tab too early, the file stays behind. Your site is stuck:

Briefly unavailable for scheduled maintenance. Check back in a minute.

The fix? Delete that file. Nothing more.

Fix 1: Delete .maintenance via FTP/SFTP (fastest)

Open your FTP client โ€” FileZilla, Cyberduck, Transmit, whatever you use โ€” and connect to your server. Navigate to your WordPress root, the same folder that holds wp-config.php.

Hidden files are invisible by default. Turn them on first:

  • FileZilla: Server โ†’ Force Showing Hidden Files
  • Cyberduck: View โ†’ Show Hidden Files

You'll see .maintenance sitting there. Delete it. Reload your site โ€” it comes back immediately.

Fix 2: Delete via SSH

# Go to your WordPress root
cd /var/www/html
# (adjust path to match your server setup)

# Confirm the file is there
ls -la | grep maintenance

# Delete it
rm .maintenance

Verify it's gone:

ls -la | grep maintenance
# No output = you're done

Fix 3: Delete via cPanel File Manager

  • Log into cPanel โ†’ File Manager
  • Navigate to your WordPress root (usually public_html)
  • Click Settings (top-right corner) โ†’ check Show Hidden Files โ†’ Save
  • Find .maintenance, right-click โ†’ Delete

Fix 4: Use WP-CLI

Got WP-CLI? One command handles everything:

wp maintenance-mode deactivate

This removes .maintenance and also checks whether WordPress is in maintenance mode through any other mechanism โ€” more thorough than a manual delete.

What if the file doesn't exist but the error persists?

Check these three culprits before digging deeper.

Cache serving a stale maintenance page

Cloudflare, WP Rocket, W3 Total Cache, and most hosting-level caches will happily serve the maintenance page to every visitor โ€” even after you've deleted the file. Purge everything:

  • Cloudflare: Dashboard โ†’ Caching โ†’ Purge Everything
  • WP Rocket: Dashboard โ†’ Clear Cache
  • Quick test: append ?nocache=1 to your URL to bypass cache and see the actual site state

A plugin is forcing maintenance mode

Plugins like SeedProd, WP Maintenance Mode, and Coming Soon Page have their own maintenance switches โ€” completely separate from the .maintenance file. If /wp-admin is accessible, check those plugin settings and turn maintenance mode off there.

If wp-admin is also blocked, drop this line into wp-config.php temporarily:

define('WP_MAINTENANCE', false);

That bypasses plugin-based maintenance mode so you can get back in. Remove it once you've fixed the plugin setting.

Incomplete update left a corrupted state

After deleting .maintenance, head to wp-admin โ†’ Dashboard โ†’ Updates and manually re-run anything that failed. If the same update keeps failing, you're likely hitting a PHP timeout or memory limit. Enable debug logging in wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

Then check wp-content/debug.log โ€” the actual error will be there.

Verification

  • Open your site in a private/incognito window (skips browser cache)
  • The homepage should load normally
  • Log into /wp-admin and confirm pending updates either completed or are queued to re-run
  • SSH or FTP: double-check that .maintenance no longer exists in the WordPress root

Prevention

An orphaned .maintenance file is almost always a PHP timeout during a large update. A few habits eliminate the problem:

  • Raise max_execution_time to at least 300 seconds. In .htaccess: php_value max_execution_time 300. In php.ini: max_execution_time = 300.
  • Update plugins one at a time. "Update All" runs them sequentially in a single browser request โ€” one slow plugin can time out the whole batch.
  • Use WP-CLI or MainWP for bulk updates on large sites. They handle timeouts far better than the browser-based updater.
  • Backup before every update, without exception. UpdraftPlus and BackWPup both offer one-click pre-update snapshots.

Related Error Notes