When things go wrong
Monthly health check#
Fifteen minutes, once a month. Connect with ssh homeserver and run each line.
| # | Check | Command (on the server) | Good result |
|---|---|---|---|
| 1 | Anything broken? | systemctl --failed |
0 loaded units listed |
| 2 | Disk space | df -h / /srv/files /srv/backup |
Use% below 85% |
| 3 | Memory | free -h |
available not near 0 |
| 4 | Temperature | sensors |
below ~70 °C at rest |
| 5 | Updates working? | sudo tail -5 /var/log/unattended-upgrades/unattended-upgrades.log |
recent dates, no ERROR |
| 6 | Restart needed? | ls /var/run/reboot-required |
"No such file". If it exists, sudo reboot |
| 7 | Backups recent? | sudo restic -r /srv/backup/restic --password-file /root/restic-password snapshots |
last line is from last night |
| 8 | Remote access | tailscale status |
all your devices listed |
| 9 | Firewall | sudo ufw status |
Status: active |
| 10 | AI model | curl -s http://127.0.0.1:8095/health |
{"status":"ok"} |
| 11 | AI kept offline | sudo nft list table inet aiguard |
table is listed |
| 12 | AI model files intact | sudo sh -c 'cd /srv/ai/models && sha256sum -c SHA256SUMS' |
every line OK |
| 13 | Fail2ban | sudo fail2ban-client status sshd |
jail running |
| 14 | Dashboard private | sudo ss -ltn 'sport = :9090' |
127.0.0.1:9090 only |
| 15 | Clock | timedatectl | grep synchronized |
yes |
| 16 | Who can log in | cat ~/.ssh/authorized_keys |
only devices you still own (check the names at the end of each line) |
Every 3 months: do a test restore of one file (Chapter 17, step 6).
Every month (laptops): look at the case for battery swelling (Chapter 13).