Files
Linux-Server-Management-Too…/CACHE_MANAGEMENT.md
T
Developer f9ae2477ed Docs: Add non-git deployment workflow for wget/extract users
- Document workflow for servers without git installed
- Explain that cache files are never in download archives
- Provide --clear-cache command for in-place updates
- Makes cache management clear for non-git deployments
2026-03-20 02:02:28 -04:00

378 lines
8.1 KiB
Markdown

# Cache Management Guide
## Overview
The Server Toolkit uses caching to avoid repeatedly scanning your system for:
- WordPress installations
- Database listings
- User and domain information
- System configuration
- Firewall status
This document explains how caching works and how to manage it.
---
## Cache Basics
### What Gets Cached
The system maintains a **Reference Database** (`.sysref.beta`) containing:
- **USER records** - All user accounts on server
- **DOMAIN records** - All domains and their owners
- **DB records** - All databases and their owners
- **WP records** - All WordPress installations
- **SYS records** - System configuration (detected once)
- **HEALTH records** - Hardware baselines
### Cache Location
**Production:** `.sysref` (for `/root/server-toolkit/`)
**Development:** `.sysref.beta` (for `/root/server-toolkit-beta/`)
Timestamps: `.sysref.timestamp` and `.sysref.beta.timestamp`
### Cache Lifetime
**TTL (Time To Live): 1 Hour**
- Cache auto-rebuilds after 1 hour
- Prevents stale data from being used too long
- Balances performance vs. freshness
---
## Why You Need to Clear Cache
### Scenario 1: After Git Pull
```bash
# You pull the latest dev changes
cd /root/server-toolkit-beta
git pull origin dev
# But old cache is still present with stale data:
# - 29 WordPress sites (from previous system)
# - Old user list
# - Outdated domain information
```
**Solution:**
```bash
bash launcher.sh --clear-cache
```
### Scenario 2: System Configuration Changed
```bash
# You added a new WordPress site
# You installed a new domain
# You created new databases
# But cache still shows old data
```
**Solution:**
```bash
bash launcher.sh --clear-cache
bash launcher.sh --detect-only # Verify new config detected
```
### Scenario 3: Moved Between Servers
```bash
# You cloned dev branch to a different server
# But cache contains data from the original server
```
**Solution:**
```bash
bash launcher.sh --clear-cache
```
---
## Cache Commands
### Clear All Cache
```bash
bash launcher.sh --clear-cache
```
Clears:
- `.sysref.beta` and `.sysref.beta.timestamp`
- All temporary files in `tmp/`
- Next run will auto-rebuild cache
### Force Fresh Detection & Rebuild
```bash
bash launcher.sh --detect-only
```
This command:
1. Clears detection cache
2. Re-detects system configuration
3. Shows detected components
4. Rebuilds reference database
### Check Cache Status
```bash
# See when cache was last built
ls -la .sysref.beta*
# Check cache age
stat .sysref.beta.timestamp
# See how much data is in cache
wc -l .sysref.beta
```
### View Cache Contents
```bash
# See what's in the cache
cat .sysref.beta | head -20
# Count records by type
awk -F'|' '{print $1}' .sysref.beta | sort | uniq -c
# Count total lines (includes headers and all records)
wc -l .sysref.beta
# Note: This total includes system records, user records, headers, and blank lines
# NOT the count of WordPress sites
```
---
## Automatic Cache Behavior
### On First Run
1. No cache exists
2. System detection runs (httpd, MySQL, etc.)
3. Reference database is built
4. Cache is created: `.sysref.beta`
5. Timestamp is recorded: `.sysref.beta.timestamp`
### On Subsequent Runs (Within 1 Hour)
1. Cache exists and is fresh
2. No detection runs (uses cached SYS_* variables)
3. Reference database is read from cache
4. Data is immediately available
5. Menu opens instantly
### After 1 Hour
1. Cache TTL expires
2. Next run detects system changes
3. Reference database is rebuilt
4. New cache is written
---
## Git & Cache Interaction
### Problem: Cache Files in Git
**Before Fix:**
```
.sysref.beta <- COMMITTED TO GIT
.sysref.beta.timestamp <- COMMITTED TO GIT
data/*.dat <- COMMITTED TO GIT
```
When you pulled, you got:
- Old cache with 0 WordPress sites
- Old database listings
- Wrong data for your system
### Solution: Proper .gitignore
**After Fix:**
```
.gitignore includes:
.sysref.beta ← NOT committed
.sysref.beta.timestamp ← NOT committed
/data/ ← NOT committed
/tmp/ ← NOT committed
/logs/ ← NOT committed
```
Now when you pull:
- No cache files are pulled
- Fresh system detection runs
- Your server's actual data is used
---
## Recommended Workflow
### Non-Git Deployment (wget/extract without git)
```bash
# 1. Download and extract fresh code
wget https://your-repo-url/archive.tar.gz
tar -xzf archive.tar.gz
# 2. If updating in same directory, clear old cache
bash launcher.sh --clear-cache
# 3. Run fresh detection
bash launcher.sh --detect-only
# 4. Run normally
bash launcher.sh
```
**Note**: Cache files are NOT included in download archives (excluded via .gitignore), so fresh extracts always start clean.
### Fresh Deployment (First Clone or Migration)
```bash
# 1. Clone or navigate to toolkit directory
cd /root/server-toolkit-beta
# 2. Remove any old untracked files (including stale cache)
git clean -fd
# 3. Verify no cache files exist
ls -la .sysref* 2>&1
# 4. Run fresh - cache will be built automatically
bash launcher.sh --detect-only
```
### After Git Pull
```bash
# 1. Update code from git
cd /root/server-toolkit-beta
git pull origin dev
# 2. Remove any untracked files from previous versions
git clean -fd
# 3. Verify detection works (cache auto-clears if launcher.sh changed)
bash launcher.sh --detect-only
# 4. Run normally
bash launcher.sh
```
### After System Changes
```bash
# 1. Made changes (added domain, installed WordPress, etc.)
# 2. Clear cache
bash launcher.sh --clear-cache
# 3. Verify changes are detected
bash launcher.sh --detect-only
# 4. Run normally
bash launcher.sh
```
### Daily Operation
```bash
# Just run normally - cache auto-expires after 1 hour
bash launcher.sh
```
---
## Troubleshooting Cache Issues
### Issue: Data Shows Stale Information
```bash
# Step 1: Clear cache
bash launcher.sh --clear-cache
# Step 2: Verify fresh data
bash launcher.sh --detect-only
```
### Issue: WordPress Sites Count is Wrong
```bash
# Clear cache and rebuild
bash launcher.sh --clear-cache
# Check count
bash launcher.sh --detect-only | grep "WordPress"
```
### Issue: User/Domain List is Old
```bash
# Force complete rebuild
bash launcher.sh --clear-cache
# Wait for rebuild (takes a few seconds)
# Then check:
bash launcher.sh --detect-only
```
### Issue: Cache File Corrupted
```bash
# Remove both cache files
rm -f .sysref.beta .sysref.beta.timestamp
# Rebuild on next run
bash launcher.sh --detect-only
```
---
## Cache Implementation Details
### How Cache Rebuilds
```bash
# When cache is stale or missing:
1. initialize_system_detection() # Detect httpd, MySQL, PHP, etc.
2. db_ensure_fresh() # Check/rebuild reference database
3. build_reference_database() # Scan for users, domains, WordPress
4. Save to .sysref.beta # Write cache file
5. Touch .sysref.beta.timestamp # Record timestamp
```
Takes 3-10 seconds depending on:
- Number of users
- Number of domains
- Number of WordPress installations
- System I/O speed
### Cache Size
Typical cache sizes:
- **10 users, 50 domains, 5 WP sites:** ~5 KB
- **50 users, 500 domains, 50 WP sites:** ~50 KB
- **500 users, 5000 domains, 500 WP sites:** ~500 KB
Cache is **text-based** for readability and easy debugging.
---
## Best Practices
### ✅ DO
- Clear cache after system configuration changes
- Clear cache after pulling git updates
- Let cache auto-expire naturally (1 hour)
- Use `--detect-only` to verify after clearing
- Check cache age if data seems wrong
### ❌ DON'T
- Edit `.sysref.beta` manually (use clear instead)
- Commit cache files to git (now impossible with .gitignore)
- Rely on cache being more than 1 hour old
- Delete cache during active operations
- Copy cache between different servers (rebuild instead)
---
## Summary
| Task | Command |
|------|---------|
| **Clear all cache** | `bash launcher.sh --clear-cache` |
| **Check detection** | `bash launcher.sh --detect-only` |
| **See cache age** | `stat .sysref.beta.timestamp` |
| **View cache contents** | `cat .sysref.beta` |
| **Count cache entries** | `wc -l .sysref.beta` |
---
**Last Updated:** 2026-03-20
**Cache Version:** 1.0
**TTL:** 1 hour
**Last Clear:** After git pull or major system changes