Page MenuHomePhabricator

D4288.diff
No OneTemporary

D4288.diff

diff --git a/keyserver/bash/scp-backup.sh b/keyserver/bash/scp-backup.sh
new file mode 100755
--- /dev/null
+++ b/keyserver/bash/scp-backup.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+
+set -e
+
+# Use like scp: bash/scp-backup.sh server:backup_src/ backup_dest/
+# - Will scp the latest backup from backup_src/
+# - Will make sure disk usage doesn't exceed $MAX_DISK_USAGE_KB in backup_dest/
+
+# The maximum amount of space to spend on backups
+MAX_DISK_USAGE_KB=5242880 # 5 GiB
+
+SCP_SOURCE=$1
+SCP_DEST_FOLDER=$2
+
+SCP_SOURCE_SERVER=$(cut -d: -f1 <<< "$SCP_SOURCE")
+SCP_SOURCE_FOLDER=$(cut -d: -f2 <<< "$SCP_SOURCE")
+NEWEST_BACKUP=$(ssh "$SCP_SOURCE_SERVER" 'find "'$SCP_SOURCE_FOLDER'" -maxdepth 1 -name "comm.*.sql.gz" -type f -printf "%T+ %p\n" | sort | tail -n 1 | cut -d " " -f2')
+
+function remove_oldest_backup {
+ OLDEST_BACKUP=$(find "$SCP_DEST_FOLDER" -maxdepth 1 -name 'comm.*.sql.gz' -type f -printf "%T+ %p\n" | sort | head -n 1 | cut -d ' ' -f2- | cut -d '' -f1)
+ if [[ ! "$OLDEST_BACKUP" ]]; then
+ return 1
+ fi
+ rm -f "$OLDEST_BACKUP"
+ return 0
+}
+
+RETRIES=2
+while [[ $RETRIES -ge 0 ]]; do
+ if scp "$SCP_SOURCE_SERVER":"$NEWEST_BACKUP" "$SCP_DEST_FOLDER"; then
+ break
+ fi
+ rm -f "$SCP_DEST_FOLDER"/"$NEWEST_BACKUP"
+
+ remove_oldest_backup || break
+ ((RETRIES--))
+done
+
+while true; do
+ TOTAL_USAGE=$(sudo du -cs "$SCP_DEST_FOLDER"/comm.*.sql.gz | awk '/total/ { print $1 }')
+ if [[ $TOTAL_USAGE -le $MAX_DISK_USAGE_KB ]]; then
+ break
+ fi
+ BACKUP_COUNT=$(find "$SCP_DEST_FOLDER" -maxdepth 1 -name "comm.*.sql.gz" -type f | wc -l)
+ if [[ $BACKUP_COUNT -lt 2 ]]; then
+ break
+ fi
+ remove_oldest_backup || break
+done

File Metadata

Mime Type
text/plain
Expires
Sun, Nov 24, 7:45 PM (20 h, 48 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2577163
Default Alt Text
D4288.diff (1 KB)

Event Timeline