VPS Maintenance Checklist 2026: Daily, Weekly, and Monthly Tasks for a Healthy Server

A VPS is not set-and-forget. Regular maintenance prevents performance degradation, security breaches, and unexpected downtime. This updated checklist covers the essential tasks every VPS administrator should perform on daily, weekly, and monthly cadences. For choosing a VPS plan with enough resources to run maintenance tools comfortably, check VPS provider options.

Daily Tasks (5 Minutes)

1. Check System Resource Usage

# Quick health check
uptime                    # Load averages
free -h                   # Memory usage
df -h                     # Disk usage
mpstat 1 3                # CPU and steal %
ss -tlnp                  # Listening services

Watch for load averages exceeding your CPU core count, memory usage above 80%, disk usage above 85%, and CPU steal above 5%. Any of these indicate potential problems.

2. Review Failed SSH Login Attempts

# Check for brute force attempts
sudo journalctl -u sshd --since "24 hours ago" | grep "Failed password"
sudo fail2ban-client status sshd 2>/dev/null || echo "Fail2ban not installed"

3. Verify Critical Services Are Running

# Check critical services
for svc in nginx mysql postgresql redis docker; do
  systemctl is-active --quiet $svc && echo "$svc: OK" || echo "$svc: DOWN"
done

Weekly Tasks (15 Minutes)

1. Apply Security Updates

# Debian/Ubuntu
sudo apt update && sudo apt upgrade -y

# RHEL/AlmaLinux/Rocky
sudo dnf update -y

# Check for reboot requirement
[ -f /var/run/reboot-required ] && echo "REBOOT REQUIRED"

2. Rotate and Review Logs

# Verify logrotate ran successfully
sudo journalctl -u logrotate --since "7 days ago" | tail -10

# Check disk usage of log files
sudo du -sh /var/log/* | sort -rh | head -10

3. Check Disk Health

# SMART status (physical disks)
sudo smartctl -H /dev/nvme0n1 2>/dev/null || sudo smartctl -H /dev/sda 2>/dev/null

# Check NVMe temperature and health
sudo nvme smart-log /dev/nvme0n1 2>/dev/null || echo "nvme-cli not installed"

4. Review Network Performance

# Check for packet loss and errors
ip -s link show eth0

# Recent bandwidth usage
vnstat -m 2>/dev/null || echo "Install vnstat for bandwidth tracking"

Monthly Tasks (30 Minutes)

1. Full System Audit

# Check for rootkits
sudo rkhunter --check --skip-keypress 2>/dev/null || sudo apt install rkhunter -y && sudo rkhunter --propupd

# List all users with shell access
cat /etc/passwd | grep -E "(/bin/bash|/bin/sh)" | cut -d: -f1

# Check for unauthorized SUID binaries
sudo find / -perm /4000 -type f 2>/dev/null | sort

2. Performance Baseline Comparison

# Compare current performance to saved baselines
# CPU
sysbench cpu run --time=10 2>/dev/null | grep "events per second"
# Memory
sysbench memory run --time=10 2>/dev/null | grep "transferred"
# Disk
sudo fio --name=read --rw=read --size=1G --bs=4k --iodepth=64 --runtime=10 --time_based 2>/dev/null | grep "IOPS"

3. Review and Clean Up Backups

# Test that backups are restorable (check file integrity)
sudo tar -tzf /backup/latest_database.sql.gz 2>/dev/null | head -5

# Verify backup sizes and retain age
ls -lah /backup/

# Clean backups older than 30 days
find /backup -name "*.sql.gz" -mtime +30 -delete

4. Kernel and Firmware Updates

# Check available kernel versions
dpkg --list | grep linux-image 2>/dev/null || rpm -qa kernel 2>/dev/null

# Remove old kernels (Debian/Ubuntu)
sudo apt autoremove --purge -y

# Check for firmware updates
sudo fwupdmgr refresh 2>/dev/null && sudo fwupdmgr update 2>/dev/null || echo "fwupd not available"

Quarterly Tasks

1. Review Firewall Rules

# UFW
sudo ufw status numbered

# nftables
sudo nft list ruleset

# iptables
sudo iptables -L -n -v

2. SSL Certificate Expiry Check

# Check expiry for all domains
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null | openssl x509 -noout -dates

Automation Script

Save time by automating daily checks. Create a cron job that emails you a daily health report:

# /etc/cron.daily/vps-health
#!/bin/bash
REPORT="/tmp/vps-health-$(date +%Y%m%d).txt"
{
  echo "=== VPS Health Report: $(date) ==="
  echo ""
  echo "--- Uptime & Load ---"
  uptime
  echo ""
  echo "--- Memory ---"
  free -h
  echo ""
  echo "--- Disk ---"
  df -h /
  echo ""
  echo "--- Failed SSH Logins (24h) ---"
  journalctl -u sshd --since "24 hours ago" | grep "Failed password" | wc -l
  echo ""
  echo "--- Listening Ports ---"
  ss -tlnp
} > "$REPORT"

# Optional: mail report
# mail -s "VPS Health Report" [email protected] < "$REPORT"

Make it executable: sudo chmod +x /etc/cron.daily/vps-health

Conclusion

Consistent maintenance is the difference between a VPS that runs for years without issues and one that fails at the worst moment. Start with the daily 5-minute checks, expand to weekly updates, and schedule monthly deep audits. Automate what you can with cron jobs and monitoring tools like Netdata so you focus on exceptions rather than routine checks.

Leave a Reply