Compare commits

...
5 Commits
Author SHA1 Message Date
trnq1ll0 67cea38030 problem beschrieben 2025-10-26 20:05:20 +01:00
trnq1ll0 f5ce954318 remove flag if older as 12h 2025-10-25 20:37:00 +02:00
trnq1ll0 1a35052ee7 add logging to file 2025-10-25 20:24:17 +02:00
trnq1ll0 69814c3396 add photo-prism auto index script 2025-10-02 06:10:12 +02:00
trnq1ll0 4e0dae29c3 add macos recording backup 2025-03-11 23:16:25 +01:00
7 changed files with 161 additions and 0 deletions

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
Alles quatsch! Das script kann nicht mehrmals ausgeführt werden, da photoprism immer alles noch mal indiziert!!!
Noch keine Lösung gefunden. Muss auch klappen wenn mal mehrere Tage die Bilder vom handy nicht gesynct wurden.
#!/bin/bash
# This script runs the index process of PhotoPrism.
# it must be called from a cronjob or similar to ensure it runs periodically.
# Flag-Datei zur Vermeidung paralleler Ausführungen
FLAG_FILE="/root/photoprism-auto-index.flag"
LOG_FILE="/root/photoprism-auto-index.log"
MAX_LOG_SIZE=$((10 * 1024 * 1024)) # 10 MB in Bytes
MAX_FLAG_AGE=$((12 * 60 * 60)) # 12 Stunden in Sekunden
# Log-Funktion
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
# Prüfe Log-Größe und kürze wenn nötig
if [ -f "$LOG_FILE" ]; then
LOG_SIZE=$(stat -f %z "$LOG_FILE" 2>/dev/null || echo 0)
if [ "$LOG_SIZE" -gt "$MAX_LOG_SIZE" ]; then
# Behalte nur die letzten 50% des Logs
tail -n 5000 "$LOG_FILE" > "$LOG_FILE.tmp"
mv "$LOG_FILE.tmp" "$LOG_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Log gekürzt (war $((LOG_SIZE / 1024 / 1024)) MB)" >> "$LOG_FILE"
fi
fi
}
# Cleanup-Funktion die IMMER ausgeführt wird (auch bei Fehlern/Abbruch)
cleanup() {
rm -f "$FLAG_FILE"
log "Cleanup: Flag-Datei gelöscht"
}
# trap registriert die cleanup-Funktion für verschiedene Exit-Szenarien:
# EXIT = normales Script-Ende
# INT = CTRL+C (Signal 2)
# TERM = kill-Befehl (Signal 15)
# ERR = wenn ein Befehl fehlschlägt (bei set -e)
trap cleanup EXIT INT TERM ERR
log "Script gestartet (PID: $$)"
# Prüfe ob ein anderer Prozess bereits läuft
if [ -f "$FLAG_FILE" ]; then
# Prüfe Alter der Flag-Datei
FLAG_MTIME=$(stat -f %m "$FLAG_FILE" 2>/dev/null || echo 0)
CURRENT_TIME=$(date +%s)
FLAG_AGE=$((CURRENT_TIME - FLAG_MTIME))
if [ $FLAG_AGE -gt $MAX_FLAG_AGE ]; then
log "Flag-Datei ist älter als 12h ($((FLAG_AGE / 3600))h) - lösche sie und starte neu"
cleanup
else
log "Abbruch: Prozess läuft bereits (seit $((FLAG_AGE / 60)) Minuten)"
trap - EXIT INT TERM ERR
exit 1
fi
fi
log "Erstelle Flag-Datei"
echo "Started: $(date '+%Y-%m-%d %H:%M:%S') | PID: $$" > "$FLAG_FILE"
# Führe Index-Prozess aus
log "Starte PhotoPrism Index-Prozess"
docker exec ix-photoprism-photoprism-1 photoprism index >> "$LOG_FILE" 2>&1
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
log "Index-Prozess erfolgreich abgeschlossen"
else
log "Index-Prozess fehlgeschlagen (Exit-Code: $EXIT_CODE)"
fi
# Flag-Datei wird automatisch durch trap cleanup gelöscht
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,30 @@
<?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.backup-recordings-to-bfds</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/rob/code/lokale-scripte/macos/Backup-Recordings/backup-recordings-to-bfds.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>12</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>/Users/rob/code/lokale-scripte/macos/Backup-Recordings/run-backup-recordings_output.log</string>
<key>StandardErrorPath</key>
<string>/Users/rob/code/lokale-scripte/macos/Backup-Recordings/run-backup-recordings_error.log</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
+40
View File
@@ -0,0 +1,40 @@
#!/bin/bash
# Quelle und Ziel definieren
SOURCE="/Users/rob/Recordings/Work/"
TARGET="/Volumes/rob/recordings/Progress/Work/"
MOUNT_POINT="/Volumes/rob"
SERVER_ADDRESS="smb://bfds/rob"
# Prüfen, ob das Netzlaufwerk gemountet ist
if mount | grep -q "$MOUNT_POINT"; then
echo "Netzlaufwerk ist gemountet. Backup startet..."
else
echo "Netzlaufwerk nicht gefunden. Versuche zu mounten..."
osascript -e "mount volume \"$SERVER_ADDRESS\""
# Nach dem Mounten erneut prüfen
if mount | grep -q "$MOUNT_POINT"; then
echo "Netzlaufwerk erfolgreich gemountet."
else
echo "Fehler: Netzlaufwerk konnte nicht gemountet werden."
osascript -e 'display notification "Backup fehlgeschlagen! Netzlaufwerk nicht erreichbar." with title "Backup Script"'
exit 1
fi
fi
# Sicherung starten
rsync -v -r -l -t -D "$SOURCE" "$TARGET"
# -r → Rekursiv kopieren (alle Unterordner & Dateien)
# -l → Symbolische Links kopieren
# -t → Zeitstempel beibehalten
# -D → Geräte- und Sonderdateien kopiere
# Erfolgsmeldung ausgeben
echo "Backup abgeschlossen: $DATE"
# Optional: Notification für macOS anzeigen
osascript -e 'display notification "Backup abgeschlossen!" with title "Backup Script"'
+13
View File
@@ -0,0 +1,13 @@
Die *.plist datei definiert wann immer das cript startet (12Uhr täglich)
Die Befehle um das script in LaunchAgents einzufügen:
# Im Terminal benutzen
- wenn $(id -u) fehler wirft den aktuellen user id manuell eingeben. sollte 501 sein
- bootout löscht erstmal das alte zeug und bootstrap fügt es neu hinzu.
```
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.backup-recordings-to-bfds.plist
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.backup-recordings-to-bfds.plist
```