Servers rarely fail all at once. They drift: disks fill up, certificates near expiry, updates pile up, backups quietly stop. A short, regular routine catches these problems early. Automate what you can, and keep a checklist for the rest.
Automate first (set up once)
| Task | How |
|---|---|
| Security updates | unattended-upgrades or dnf-automatic |
| Backups | Nightly, encrypted, off-server — backup to cloud storage |
| Backup monitoring | A “dead man’s switch” check that alerts if a backup doesn’t run |
| Certificate renewal | Certbot timer (installed automatically) |
| Uptime monitoring | External HTTP/ping checks with alerts |
| Log rotation | logrotate (default) and a journal size limit |
| Resource alerts | Disk > 80%, RAM, load — Netdata, Prometheus, or a hosted monitor |
Limit the systemd journal so it can’t fill the disk:
# /etc/systemd/journald.conf
SystemMaxUse=500M
Daily (automated — just read the alerts)
- Did backups succeed?
- Any uptime or resource alerts?
- Any unusual spike in failed logins (
journalctl -u ssh)?
Weekly (10 minutes)
df -h # disk space
free -h # memory (look at 'available')
uptime # load
systemctl --failed # failed services
journalctl -p err -S -7d | tail -50 # errors this week
fail2ban-client status sshd # bans
- Check application logs for new errors.
- Apply non-security updates if you don’t automate them:
apt update && apt upgrade. - Reboot if required (
/var/run/reboot-required) during a quiet period.
Monthly (30–60 minutes)
- Test a restore of at least one site or database from the off-site backup.
- Review users and keys — remove old accounts and SSH keys; check
sudomembership. - Check listening services and firewall:
ss -tulpn,ufw status— anything unexpected? - Update applications — CMS, plugins, Docker images (
docker compose pull && docker compose up -d). - Clean up — old releases, unused Docker images (
docker image prune), old backups beyond retention. - Review resource trends — is disk growing steadily? Is RAM close to the limit at peak?
Quarterly
- Full disaster recovery drill on a fresh VPS: install, restore, verify. Time it.
- OS lifecycle: is your distribution version still supported? Plan upgrades well before end of life.
- Security review: run
lynis audit system, check TLS settings with an online scanner, review SSH hardening. - Capacity planning: do you need a larger plan, or can you downsize? Plans can be upgraded by ticket.
- Documentation: update your notes — what runs on the server, where configs live, how to restore.
Keep a server log
A simple text file (or wiki page) with dated entries — “2026-11-04: upgraded PHP to 8.3, raised pm.max_children to 28” — turns future troubleshooting from guesswork into a quick lookup.
Signs something needs attention now
- Disk usage growing faster than usual
- Load average higher than CPU count during normal traffic
- Swap activity (
vmstatsi/so) under normal load - New errors in logs after an update
- Backups taking much longer than before
Each of these has a guide: disk performance, server performance, common Debian errors.
Summary
Automate updates, backups, renewals and monitoring; spend ten minutes a week on checks, an hour a month on restores and reviews, and a few hours a quarter on recovery drills and planning. That routine keeps any VPS healthy for years.