| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .. | ||
| netcup-standby-guard.sh | ||
| nl.eddydevink.netcup-standby-guard.plist | ||
| README.md | ||
netcup-standby-guard (Mac LaunchDaemon)
Zet de wuzapi-multiplexer op netcup automatisch op STANDBY zodra netcup weer
bereikbaar is, maar alleen als nextcloud actief is. Voorkomt dubbel-antwoorden in de
WhatsApp-groepen wanneer netcup terugkomt terwijl nextcloud (na handmatige flip) de
actieve node is.
Waarom / invariant
- De multiplexer is de standby-guard (
src/multiplexer.js): node zonderSTANDBYrouteert webhooks door, node metSTANDBY=1ACKt alleen (200). - Bij een netcup-uitval kan de netcup-unit niet op STANDBY gezet worden → na de handmatige flip van nextcloud naar ACTIEF zijn beide nodes bij netcup-comeback actief. Deze guard flipt netcup dan binnen één poll-interval (60 s) naar STANDBY.
- Invariant: netcup wordt alleen naar STANDBY geflipt als nextcloud bevestigd ACTIEF
is (geen
STANDBY=1in de nextcloud-unit). Staat nextcloud op STANDBY, dan is netcup-actief een bewuste failover (nextcloud-onderhoud) → geen flip.
Installatie (Mac)
sudo -A cp deploy/netcup-standby-guard.sh /usr/local/bin/netcup-standby-guard.sh
sudo -A chmod 755 /usr/local/bin/netcup-standby-guard.sh
sudo -A cp deploy/nl.eddydevink.netcup-standby-guard.plist /Library/LaunchDaemons/
sudo -A launchctl bootstrap system /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
sudo -A launchctl kickstart -k system/nl.eddydevink.netcup-standby-guard # eerste run direct
- Draait als
eddy(UserName in plist) → gebruikt de aliassen uit~/.ssh/config(netcupmet key~/.ssh/netcup_agent_ed25519zonder passphrase, ennextcloud). - Notificatie via Gotify: token in
~/.netcup-guard.env(GOTIFY_TOKEN=..., mode 600, gitignored). Ontbreekt het bestand → alleen loggen. - Log:
~/Library/Logs/netcup-standby-guard.log; status:~/.netcup-guard-state.
Uitschakelen zónder verwijderen (beschikbaar houden)
Daemon stoppen en uitschakelen; bestanden blijven op hun plek. Her-inzetten duurt ~30 s.
sudo -A launchctl bootout system/nl.eddydevink.netcup-standby-guard 2>/dev/null
sudo -A mv /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist \
/Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist.disabled
Her-inzetten (op aanwijzing van de admin):
sudo -A mv /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist.disabled \
/Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
sudo -A launchctl bootstrap system /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist
sudo -A launchctl kickstart -k system/nl.eddydevink.netcup-standby-guard # directe test-run
Status: 2026-10-19 uitgezet per user-besluit (steady state = nextcloud ACTIEF / netcup STANDBY; de guard is alleen van nut na een onverwachte uitval van één node — zie boven).
Handmatige test
/usr/local/bin/netcup-standby-guard.sh # run als eddy
tail -5 ~/Library/Logs/netcup-standby-guard.log
Opruimen
sudo -A launchctl bootout system/nl.eddydevink.netcup-standby-guard
sudo -A rm /Library/LaunchDaemons/nl.eddydevink.netcup-standby-guard.plist /usr/local/bin/netcup-standby-guard.sh