|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
WEBDAV_URL=${WEBDAV_URL%/} |
|
|
WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH:-""} |
|
|
WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH#/} |
|
|
WEBDAV_BACKUP_PATH=${WEBDAV_BACKUP_PATH%/} |
|
|
|
|
|
if [ -n "$WEBDAV_BACKUP_PATH" ]; then |
|
|
FULL_WEBDAV_URL="${WEBDAV_URL}/${WEBDAV_BACKUP_PATH}" |
|
|
else |
|
|
FULL_WEBDAV_URL="${WEBDAV_URL}" |
|
|
fi |
|
|
|
|
|
|
|
|
SYNC_INTERVAL=${SYNC_INTERVAL:-600} |
|
|
|
|
|
|
|
|
BACKUP_NAME="gcli2api_creds.tar.gz" |
|
|
TEMP_FILE="/tmp/$BACKUP_NAME" |
|
|
TARGET_DIR="creds" |
|
|
|
|
|
|
|
|
|
|
|
log() { echo "[Backup] [$(date '+%H:%M:%S')] $1"; } |
|
|
|
|
|
|
|
|
if [[ -z "$WEBDAV_URL" ]]; then |
|
|
log "未设置 WEBDAV_URL,跳过备份功能" |
|
|
exit 0 |
|
|
fi |
|
|
|
|
|
|
|
|
mkdir -p "$TARGET_DIR" |
|
|
|
|
|
|
|
|
restore() { |
|
|
log "正在检查远程备份..." |
|
|
REMOTE_FILE="$FULL_WEBDAV_URL/$BACKUP_NAME" |
|
|
|
|
|
|
|
|
HTTP_CODE=$(curl -s -o "$TEMP_FILE" -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" "$REMOTE_FILE") |
|
|
|
|
|
if [[ "$HTTP_CODE" == "200" ]]; then |
|
|
if [ -s "$TEMP_FILE" ]; then |
|
|
log "发现备份,正在恢复到 $TARGET_DIR..." |
|
|
|
|
|
tar -xzf "$TEMP_FILE" |
|
|
log "✅ 恢复完成" |
|
|
else |
|
|
log "❌ 下载文件为空,跳过" |
|
|
fi |
|
|
else |
|
|
log "📭 未找到远程备份 (HTTP $HTTP_CODE),使用新环境启动" |
|
|
fi |
|
|
} |
|
|
|
|
|
|
|
|
loop() { |
|
|
log "启动定时备份 (间隔: ${SYNC_INTERVAL}秒)" |
|
|
|
|
|
|
|
|
if [ -n "$WEBDAV_BACKUP_PATH" ]; then |
|
|
curl -s -o /dev/null -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -X MKCOL "$FULL_WEBDAV_URL/" |
|
|
fi |
|
|
|
|
|
while true; do |
|
|
sleep $SYNC_INTERVAL |
|
|
|
|
|
|
|
|
if [ "$(ls -A $TARGET_DIR)" ]; then |
|
|
|
|
|
|
|
|
tar -czf "$TEMP_FILE" "$TARGET_DIR" |
|
|
|
|
|
FILE_SIZE=$(wc -c < "$TEMP_FILE") |
|
|
log "正在上传备份 (大小: $FILE_SIZE bytes)..." |
|
|
|
|
|
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" -u "$WEBDAV_USERNAME:$WEBDAV_PASSWORD" -T "$TEMP_FILE" "$FULL_WEBDAV_URL/$BACKUP_NAME") |
|
|
|
|
|
if [[ "$HTTP_CODE" == "201" ]] || [[ "$HTTP_CODE" == "204" ]] || [[ "$HTTP_CODE" == "200" ]]; then |
|
|
log "备份成功" |
|
|
else |
|
|
log "备份失败 (HTTP $HTTP_CODE)" |
|
|
fi |
|
|
else |
|
|
log "⚠️ $TARGET_DIR 目录为空,跳过备份" |
|
|
fi |
|
|
done |
|
|
} |
|
|
|
|
|
|
|
|
case "$1" in |
|
|
"restore") restore ;; |
|
|
"loop") loop ;; |
|
|
*) restore; loop ;; |
|
|
esac |