← back to Dw Photo Capture
Nightly additive rsync of vendor photo archive to Henry + launchd plist (TK-12162)
2653995afdbe8991df6f0707ddd0c6a33597e8c7 · 2026-09-24 16:20:33 -0700 · Steve Abrams
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NR59q54WMPw4GdNgi2z1jM
Files touched
A scripts/launchd/com.steve.dwphoto-vendor-photos-henry.plistA scripts/sync-vendor-photos-to-henry.sh
Diff
commit 2653995afdbe8991df6f0707ddd0c6a33597e8c7
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 24 16:20:33 2026 -0700
Nightly additive rsync of vendor photo archive to Henry + launchd plist (TK-12162)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NR59q54WMPw4GdNgi2z1jM
---
.../com.steve.dwphoto-vendor-photos-henry.plist | 9 +++++++++
scripts/sync-vendor-photos-to-henry.sh | 19 +++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/scripts/launchd/com.steve.dwphoto-vendor-photos-henry.plist b/scripts/launchd/com.steve.dwphoto-vendor-photos-henry.plist
new file mode 100644
index 0000000..0b37302
--- /dev/null
+++ b/scripts/launchd/com.steve.dwphoto-vendor-photos-henry.plist
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0"><dict>
+ <key>Label</key><string>com.steve.dwphoto-vendor-photos-henry</string>
+ <key>ProgramArguments</key><array><string>/bin/bash</string><string>/Users/macstudio3/Projects/dw-photo-capture/scripts/sync-vendor-photos-to-henry.sh</string></array>
+ <key>StartCalendarInterval</key><dict><key>Hour</key><integer>2</integer><key>Minute</key><integer>17</integer></dict>
+ <key>StandardOutPath</key><string>/Users/macstudio3/Library/Logs/dwphoto-vendor-photos-sync.out</string>
+ <key>StandardErrorPath</key><string>/Users/macstudio3/Library/Logs/dwphoto-vendor-photos-sync.err</string>
+</dict></plist>
diff --git a/scripts/sync-vendor-photos-to-henry.sh b/scripts/sync-vendor-photos-to-henry.sh
new file mode 100755
index 0000000..c4afba4
--- /dev/null
+++ b/scripts/sync-vendor-photos-to-henry.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+# Nightly: copy the dwphoto per-vendor photo archive (Kamatera) down to Henry.
+# Additive only — never passes --delete, so a photo removed on the server is kept on Henry.
+# Runs under launchd's /bin/bash 3.2: keep it simple (no heredocs inside $()).
+set -u
+REMOTE="root@45.61.58.125:/root/public-projects/dwphoto"
+DEST="/Volumes/Henry/dwphoto-vendor-photos"
+LOG="$HOME/Library/Logs/dwphoto-vendor-photos-sync.log"
+STAMP="$DEST/.last-sync"
+ts() { date '+%Y-%m-%dT%H:%M:%S%z'; }
+if [ ! -d /Volumes/Henry ]; then echo "$(ts) FAIL Henry not mounted" >> "$LOG"; exit 2; fi
+mkdir -p "$DEST/vendors" || { echo "$(ts) FAIL mkdir $DEST" >> "$LOG"; exit 3; }
+SSH="ssh -o BatchMode=yes -o ConnectTimeout=15"
+if ! rsync -a -e "$SSH" "$REMOTE/photos/vendors/" "$DEST/vendors/" >> "$LOG" 2>&1; then
+ echo "$(ts) FAIL rsync photos" >> "$LOG"; exit 4
+fi
+rsync -a -e "$SSH" "$REMOTE/data/vendor-photos.jsonl" "$DEST/vendor-photos.jsonl" >> "$LOG" 2>&1 || echo "$(ts) WARN index not copied" >> "$LOG"
+N=$(find "$DEST/vendors" -type f -name '*.jpg' | wc -l | tr -d ' ')
+echo "$(ts) OK $N photos" | tee "$STAMP" >> "$LOG"
← 0260eb6 Save every uploaded photo by vendor: photos/vendors/<Vendor>
·
back to Dw Photo Capture
·
Henry sync: treat not-yet-created server archive as OK 0, no d6f19b5 →