33 lines
1.4 KiB
Markdown
33 lines
1.4 KiB
Markdown
# Deployment bits that live outside the app
|
|||
|
|
|
||
|
|
## `org.waterschurch.checklist-drive-backup.plist`
|
||
|
|
|
||
|
|
The LaunchAgent that runs the nightly off-site backup. It belongs in
|
||
|
|
`~/Library/LaunchAgents/` on **one** always-on Mac — currently the ingest Mac
|
||
|
|
(`NA-Ingest`, account `Studio`). Install with:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cp deploy/org.waterschurch.checklist-drive-backup.plist ~/Library/LaunchAgents/
|
||
|
|
launchctl load ~/Library/LaunchAgents/org.waterschurch.checklist-drive-backup.plist
|
||
|
|
```
|
||
|
|
|
||
|
|
**The path in it matters more than it looks.** It points at `~/checklist-app`, not
|
||
|
|
`~/Documents/…`, and that is not cosmetic: macOS TCC does not let `launchd` execute
|
||
|
|
anything inside `~/Documents`, `~/Desktop` or `~/Downloads`. When the project lived in
|
||
|
|
`~/Documents` the agent failed instantly every night with
|
||
|
|
|
||
|
|
```
|
||
|
|
/bin/bash: …/backup-to-drive.sh: Operation not permitted
|
||
|
|
```
|
||
|
|
|
||
|
|
logging nothing, for eight days, because the script never started. Keep the checkout
|
||
|
|
outside those folders on any machine that runs this agent.
|
||
|
|
|
||
|
|
The same restriction applies one level down: `launchd` can stat a named file under
|
||
|
|
`~/Library/CloudStorage` but cannot list the directory, which is why
|
||
|
|
`backup-to-drive.sh` checks explicit filenames instead of globbing.
|
||
|
|
|
||
|
|
A LaunchAgent only fires while that user is logged in. If the Mac is asleep at 04:15,
|
||
|
|
launchd runs the job shortly after it wakes, so a missed night self-heals — but a Mac
|
||
|
|
that is off, or logged out, backs nothing up and says nothing.
|