Your site shows “Briefly unavailable for scheduled maintenance. Check back in a minute.”, and the minute has long passed. This happens when a WordPress, plugin or theme update is interrupted. The fix takes seconds, but you should also check that the update itself didn’t leave something half-installed.
Why it happens
During updates, WordPress creates a file called .maintenance in the site root. While it exists (and is less than 10 minutes old), every visitor sees the maintenance message. When the update finishes, WordPress deletes it.
If the update is interrupted (browser closed, PHP timeout, memory limit, server restart, lost connection, or a permission error), the file stays behind.
The fix: delete .maintenance
Over SSH:
cd /var/www/example.com
ls -la .maintenance
rm .maintenance
(It’s a hidden file, so use ls -la to see it. In SFTP clients, enable “show hidden files”.)
With WP-CLI:
wp maintenance-mode status
wp maintenance-mode deactivate
Reload the site. It should be back.
Then: check the update that failed
The interrupted update may have left a plugin, theme or core partly updated:
wp core verify-checksums # core files intact?
wp plugin list --fields=name,status,version,update
wp plugin verify-checksums --all # plugins from wordpress.org
- If a plugin is broken or missing files, reinstall it:
wp plugin install plugin-slug --force. - If core is damaged, reinstall the same version:
wp core download --force --skip-content --version=$(wp core version). - If the site shows errors now, see WordPress critical error and WordPress debug mode.
Look for leftover upgrade folders too: wp-content/upgrade/ holds temporary files from updates, and can be emptied.
Why updates get interrupted (and how to prevent it)
| Cause | Prevention |
|---|---|
| Bulk-updating many plugins at once | Update in smaller batches, or use WP-CLI |
PHP max_execution_time or memory limit hit |
Raise limits sensibly. See php.ini settings |
| Wrong file ownership (can’t write files) | Fix ownership. See WordPress file permissions |
| Closing the browser tab mid-update | Wait for the “complete” message |
| Server restarted or out of memory | Monitor resources; schedule updates at quiet times |
On a VPS, WP-CLI updates are the most reliable, because they don’t depend on web request timeouts:
wp plugin update --all
wp theme update --all
wp core update && wp core update-db
Even better: test updates on a staging copy first. See update WordPress safely and WordPress staging site.
Still seeing the message after deleting the file?
- Caching: a page cache or CDN may have stored the maintenance page. Purge the cache plugin, Nginx FastCGI cache and CDN.
- Wrong directory:
.maintenancelives in the WordPress root (next towp-config.php). On multisite or subdirectory installs, check the right folder. - A maintenance plugin is active: “coming soon” plugins show their own page. Deactivate the plugin, or switch its mode off.
Planned maintenance: do it properly
If you want a maintenance page while you work:
- WP-CLI:
wp maintenance-mode activate(anddeactivateafterwards). - Custom page: create
wp-content/maintenance.php. WordPress shows it instead of the default message while.maintenanceexists. - Plugins: “coming soon” or maintenance plugins show a styled page to visitors, while logged-in admins see the site.
For SEO, a maintenance page should return HTTP 503 with a Retry-After header (WordPress’s built-in maintenance mode does this), so search engines know it’s temporary.
For longer maintenance, you can also serve a static page from Nginx:
if (-f $document_root/maintenance.on) { return 503; }
error_page 503 /maintenance.html;
location = /maintenance.html { internal; }
Quick reference
| Task | Command |
|---|---|
| Exit maintenance mode | rm .maintenance or wp maintenance-mode deactivate |
| Check status | wp maintenance-mode status |
| Verify core files | wp core verify-checksums |
| Reinstall a plugin | wp plugin install <slug> --force |
| Reliable updates | wp plugin update --all |
Related: WordPress white screen of death and WP-CLI guide.