# Quick check from command line
-weight: 500;">curl -o /dev/null -s -w "%{http_code}" https://clientsite.com # External check tools
# downforeveryoneorjustme.com
# isitdownrightnow.com
# Quick check from command line
-weight: 500;">curl -o /dev/null -s -w "%{http_code}" https://clientsite.com # External check tools
# downforeveryoneorjustme.com
# isitdownrightnow.com
# Quick check from command line
-weight: 500;">curl -o /dev/null -s -w "%{http_code}" https://clientsite.com # External check tools
# downforeveryoneorjustme.com
# isitdownrightnow.com
# Is the server responding at all?
ping clientserver.com # Check disk space (full disk = 500 errors)
df -h /var/www/ # Check memory and load
free -m
uptime # Check PHP error log
tail -50 /var/log/apache2/error.log | grep "$(date +%Y-%m-%d)"
# Is the server responding at all?
ping clientserver.com # Check disk space (full disk = 500 errors)
df -h /var/www/ # Check memory and load
free -m
uptime # Check PHP error log
tail -50 /var/log/apache2/error.log | grep "$(date +%Y-%m-%d)"
# Is the server responding at all?
ping clientserver.com # Check disk space (full disk = 500 errors)
df -h /var/www/ # Check memory and load
free -m
uptime # Check PHP error log
tail -50 /var/log/apache2/error.log | grep "$(date +%Y-%m-%d)"
tail -100 /var/www/clientsite/wp-content/debug.log
tail -100 /var/www/clientsite/wp-content/debug.log
tail -100 /var/www/clientsite/wp-content/debug.log
// In wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
// In wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
// In wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
# Rename .htaccess to test (regenerates automatically)
mv /var/www/site/.htaccess /var/www/site/.htaccess.bak # Deactivate all plugins via database (when you can't access wp-admin)
wp --allow-root plugin deactivate --all # Reactivate one by one to find culprit
wp --allow-root plugin activate plugin-slug
# Rename .htaccess to test (regenerates automatically)
mv /var/www/site/.htaccess /var/www/site/.htaccess.bak # Deactivate all plugins via database (when you can't access wp-admin)
wp --allow-root plugin deactivate --all # Reactivate one by one to find culprit
wp --allow-root plugin activate plugin-slug
# Rename .htaccess to test (regenerates automatically)
mv /var/www/site/.htaccess /var/www/site/.htaccess.bak # Deactivate all plugins via database (when you can't access wp-admin)
wp --allow-root plugin deactivate --all # Reactivate one by one to find culprit
wp --allow-root plugin activate plugin-slug
# Verify database credentials in wp-config.php match actual DB
wp --allow-root db check # Try connecting manually
mysql -u DB_USER -p -h DB_HOST DB_NAME
# Verify database credentials in wp-config.php match actual DB
wp --allow-root db check # Try connecting manually
mysql -u DB_USER -p -h DB_HOST DB_NAME
# Verify database credentials in wp-config.php match actual DB
wp --allow-root db check # Try connecting manually
mysql -u DB_USER -p -h DB_HOST DB_NAME
# Check for recently modified PHP files (last 24h)
find /var/www/site -name "*.php" -mtime -1 -ls # Check core file integrity
wp --allow-root core verify-checksums # Check for injected code in index.php
head -30 /var/www/site/index.php
head -30 /var/www/site/wp-config.php
# Check for recently modified PHP files (last 24h)
find /var/www/site -name "*.php" -mtime -1 -ls # Check core file integrity
wp --allow-root core verify-checksums # Check for injected code in index.php
head -30 /var/www/site/index.php
head -30 /var/www/site/wp-config.php
# Check for recently modified PHP files (last 24h)
find /var/www/site -name "*.php" -mtime -1 -ls # Check core file integrity
wp --allow-root core verify-checksums # Check for injected code in index.php
head -30 /var/www/site/index.php
head -30 /var/www/site/wp-config.php
# Restore database
wp --allow-root db import last_known_good_backup.sql
wp --allow-root cache flush # Restore files (if file corruption suspected)
# Unzip backup archive over current files
unzip -o wp-content-backup.zip -d /var/www/site/
# Restore database
wp --allow-root db import last_known_good_backup.sql
wp --allow-root cache flush # Restore files (if file corruption suspected)
# Unzip backup archive over current files
unzip -o wp-content-backup.zip -d /var/www/site/
# Restore database
wp --allow-root db import last_known_good_backup.sql
wp --allow-root cache flush # Restore files (if file corruption suspected)
# Unzip backup archive over current files
unzip -o wp-content-backup.zip -d /var/www/site/
0-2 min: Confirm outage (external tool + different network)
2-5 min: Identify symptom type
5-7 min: Check server resources + error logs
7-10 min: Apply fix based on symptom
10-12 min: Verify site is up, test key pages
12-15 min: Contact client with -weight: 500;">status -weight: 500;">update
0-2 min: Confirm outage (external tool + different network)
2-5 min: Identify symptom type
5-7 min: Check server resources + error logs
7-10 min: Apply fix based on symptom
10-12 min: Verify site is up, test key pages
12-15 min: Contact client with -weight: 500;">status -weight: 500;">update
0-2 min: Confirm outage (external tool + different network)
2-5 min: Identify symptom type
5-7 min: Check server resources + error logs
7-10 min: Apply fix based on symptom
10-12 min: Verify site is up, test key pages
12-15 min: Contact client with -weight: 500;">status -weight: 500;">update
# wp-uptime-monitor.ps1 -- runs via Task Scheduler every 5 min
$sites = Get-Content "clients.json" | ConvertFrom-Json
foreach ($site in $sites) { $code = (Invoke-WebRequest -Uri $site.url -UseBasicParsing).StatusCode if ($code -ne 200) { Send-MailMessage -To "[email protected]" -Subject "DOWN: $($site.name)" -Body "Status: $code" }
}
# wp-uptime-monitor.ps1 -- runs via Task Scheduler every 5 min
$sites = Get-Content "clients.json" | ConvertFrom-Json
foreach ($site in $sites) { $code = (Invoke-WebRequest -Uri $site.url -UseBasicParsing).StatusCode if ($code -ne 200) { Send-MailMessage -To "[email protected]" -Subject "DOWN: $($site.name)" -Body "Status: $code" }
}
# wp-uptime-monitor.ps1 -- runs via Task Scheduler every 5 min
$sites = Get-Content "clients.json" | ConvertFrom-Json
foreach ($site in $sites) { $code = (Invoke-WebRequest -Uri $site.url -UseBasicParsing).StatusCode if ($code -ne 200) { Send-MailMessage -To "[email protected]" -Subject "DOWN: $($site.name)" -Body "Status: $code" }
} - Is it the entire site, or just specific pages?
- Is it a white screen, a 500 error, a 503, or something else?
- Is the admin dashboard accessible? (try /wp-admin)
- When did it go down? (Check uptime monitor logs)
- What changed recently? (Check your maintenance log) - I automated WP maintenance across 8 client sites
- WordPress plugin conflicts: diagnose and fix
- WordPress backups: the strategy that actually works
- WordPress security: 10-minute monthly checklist
- WP-CLI: cut maintenance to 20 minutes
- 15 AI prompts for tech freelancers (the uncomfortable ones included) - How I use AI to run a WordPress maintenance business