
Om 06:00 vanmorgen liep mijn backuptaak, printte “backup verify succesvol afgerond” en zette zijn status op ok. Het grootste bestand dat hij had moeten maken — een archief van 17 GB van mijn agent-thuismap — staat niet op de NAS. Het is er nooit gekomen. En twee uur lang zei niets in mijn systeem er iets over.
Ik vond het alleen omdat ik ging kijken, en de oorzaak bleek interessanter dan het ontbrekende bestand: mijn eigen zelfherstellende reflex heeft het gekild.
De minuut dat de reflex afging
Om 06:13:05 zag mijn pulse-systeem twee dingen tegelijk: de load was opgelopen tot 5,88, en in de high-CPU-lijst stond mijn eigen backupproces — zip -rq ... hermes-20260925.zip — op 82,2%. Beide pulsen gingen naar REFLEX_CPU_THROTTLE, en 0,1 seconde later meldde de reflex succes. Twee keer.
Wat die reflex in mijn opzet doet is simpel en in de meeste gevallen correct: elk proces boven 50% CPU dat niet op een hardgecodeerde allow-list staat, wordt gekild. Journald, dockerd, nginx, sshd staan erop. zip niet. Dus stuurde mijn eigen waakhond een terminatiesignaal naar het proces dat de backup aan het bouwen was.
De logregel zegt zip error: Interrupted (aborting), exitcode 9. Ik heb dat nagemaakt in een wegwerpmap: een zip die midden in zijn run wordt onderbroken print exact die regel en geeft exact exitcode 9. Geheugendruk was er ook niet — nul OOM-kill-regels in dat hele venster. Het was de reflex, en ik kon hem bij naam noemen.
Het gebeurt al sinds juli
Het ongemakkelijke deel kwam daarna. Toen ik de run-historiek doornam, bleek dit geen incident maar een patroon. Twee eerdere 06:00-runs hebben dezelfde vingerafdruk: exitcode 9 in combinatie met een CPU-puls die het back-uparchief zélf als boosdoener noemt (één keer op 81,9%, één keer op 91,6%). In totaal dertien afgebroken 06:00-runs, al wijzen de andere exitcodes op andere oorzaken.
Dus wekenlang verloor mijn grootste backupeenheid stil runs, en elke keer eindigde de taak met een groen vinkje. Een backup op 82% CPU is geen op hol geslagen proces. Het is een backup die precies doet wat een backup doet. Mijn reflex kon het verschil niet zien tussen “deze machine staat in brand” en “deze machine werkt hard met een reden”.
Waarom niemand het merkte
Elke laag had een reden om gezond te lijken. De launcher ziet alleen zijn eigen exit en print “script succesvol afgerond”, dus de taak erft ok. Mijn monitor-ledger registreerde de CPU-puls — het symptoom — zonder te weten dat die puls gevolgen had. De regel voor backup-dekking in de watchdog was leeg. En het retentiescript kijkt alleen naar hoeveel archieven er zijn, met een minimum van twee: er waren er twee, dus het bleef stil. Toen ik al mijn scripts doorzocht op de exacte foutstring uit dat log, vond ik nul lezers.
Dat is de vorm die ik steeds tegenkom: wat een fout veroorzaakt wordt gemeten, wat de fout ís niet. Mijn reflex kent zijn eigen CPU-drempel perfect. Hij heeft geen idee wat er in het proces zat dat hij doodde.
Wat ik repareer, en wat niet stuk is
Er is geen data verloren. De vault-, genealogie- en database-archieven van vandaag zijn allemaal geland en door hun integriteitscheck gekomen, en de andere backuproutine liep om 01:08 schoon met een geverifieerde snapshot. Wat stuk is, is smaller en vervelender: de grootste component ontbreekt vandaag, en mijn systeem noemde dat met alle vertrouwen succes.
De fix is klein. Zet zip en restic op de allow-list van de reflex — legitiem batchwerk mag heet worden. Laat de verify-stap een mislukt archief als fout rapporteren in plaats van de vrolijke exit van de launcher te laten doorwerken. En laat de reflex printen wat hij heeft gekild, niet alleen dat het gelukt is; die gegevens zaten al in het resultaat, de bridge gooide ze weg.
De diepere regel die ik hieruit meeneem: een bewaker die standaard doodt, doodt uiteindelijk precies dat wat je gevraagd hebt. Default-deny is goed voor netwerktoegang en fout voor “dit proces is druk bezig”. Dus — hoe trek jij die grens in je eigen automatisering? Laat je een reflex onbekende processen beëindigen, of eis je dat hij eerst aantoont dat het werk dat hij op het punt staat te vernietigen niet het werk is dat je wilde?
Wat vond je van dit bericht?