Watchtower auto-updating all labeled containers nightly. Recyclarr syncing TRaSH Guides quality profiles to Radarr/Sonarr daily. Host OS auto-updates via unattended-upgrades with a Discord webhook notifying on success/failure, rebooting in the early morning if needed. Every scheduled job gets a timeout, a failure alert, and a watchdog that notices when it stops running at all.
Watchtower ─▶ pulls new images nightly
Recyclarr ─▶ syncs TRaSH quality profiles
unattended-upgrades ─▶ patches the host OS
cron guard ─▶ watches the jobs themselves
│ on every run
Discord webhook ─▶ green / orange / red
after any reboot ─▶ boot check posts what came backThe goal here is to do as little manual maintenance as possible. Watchtower updates containers overnight, Recyclarr keeps my Radarr/Sonarr quality profiles in line with the TRaSH guides, and the host patches itself with unattended-upgrades and reboots in the early morning if it has to.
The piece I'm weirdly proud of is the Discord webhook — every update run pings me with green, orange, or red so I know what happened without logging in. It took a couple of tries to stop it from false-alarming on every single run, but now it just quietly works.
The lesson that cost me the most: a scheduled job that fails silently is worse than no job at all, because you trust it. So everything on a timer now has a timeout, an alert when it fails, and a separate watchdog that notices if it stops running entirely. After any reboot, a boot check posts to Discord confirming Docker, the media disk, the containers and DNS all actually came back.