Logo 📚 Digital Library

备份脚本存档

 

Trilium 备份脚本#


[root@mg12051871279501160 ~]# cat /opt/scripts/trilium_backup.sh 
#!/bin/bash

### === 配置区(根据你的实际情况修改) ===

# Trilium 数据目录(你提供的路径)
DATA_DIR="/opt/1panel/apps/local/trilium/localtrilium/data"

# 本地备份存放位置
LOCAL_BACKUP_DIR="/opt/backup/trilium"

# 远端 Synology 备份目录
REMOTE_TARGET="syno:/volume1/nfs/backup/trilium-backup/"

# 保留份数
LOCAL_KEEP=1
REMOTE_KEEP=7

# 备份文件名(带日期时间)
DATE=$(date +"%Y-%m-%d_%H-%M-%S")
BACKUP_NAME="trilium_${DATE}.tar.gz"

### === 开始执行 ===

mkdir -p "$LOCAL_BACKUP_DIR"
cd "$DATA_DIR" || exit 1

echo "==> 打包 Trilium 备份:${BACKUP_NAME}"

tar -czf "${LOCAL_BACKUP_DIR}/${BACKUP_NAME}" \
    --exclude="backup" \
    --exclude="tmp" \
    --exclude="log" \
    .

echo "==> 本地备份完成:${LOCAL_BACKUP_DIR}/${BACKUP_NAME}"

### === 本地清理旧备份 ===
echo "==> 清理本地旧备份,只保留最新 $LOCAL_KEEP 个"

cd "$LOCAL_BACKUP_DIR"
ls -1tr trilium_*.tar.gz | head -n -"$LOCAL_KEEP" | xargs -r rm -f

### === 远端复制(Synology) ===
echo "==> 上传至 Synology:${REMOTE_TARGET}"

scp "${LOCAL_BACKUP_DIR}/${BACKUP_NAME}" "$REMOTE_TARGET"

if [ $? -ne 0 ]; then
    echo "❌ SCP 传输失败!退出脚本。"
    exit 1
fi

echo "==> 上传成功!"

### === 远端清理旧备份 ===
echo "==> 清理 Synology 远端旧备份,保留最新 $REMOTE_KEEP 个"

ssh syno "cd /volume1/nfs/backup/trilium-backup/ && ls -1tr trilium_*.tar.gz | head -n -${REMOTE_KEEP} | xargs -r rm -f"

echo "==> 完成!"
[root@mg12051871279501160 ~]# crontab -l
# 备份Trilium至群晖
0 3 * * * /opt/scripts/trilium_backup.sh >/var/log/trilium_backup.log 2>&1

[root@mg12051871279501160 ~]# 
[root@mg12051871279501160 ~]# date
Thu Nov 20 00:51:37 CST 2025
[root@mg12051871279501160 ~]#