62 lines
1.6 KiB
Bash
Executable File
62 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 数据备份脚本
|
|
# 备份 /opt/gamer 的数据到 /opt/backup/data/YYYYMMDD/gamer
|
|
|
|
# 设置变量
|
|
SOURCE_DIR="/opt/gamer"
|
|
BACKUP_ROOT="/opt/backup/data"
|
|
DATE=$(date +%Y%m%d)
|
|
BACKUP_DIR="${BACKUP_ROOT}/${DATE}/gamer"
|
|
|
|
# 创建备份目录
|
|
mkdir -p "${BACKUP_DIR}"
|
|
|
|
# 备份数据库
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始备份数据库..."
|
|
export SOURCE_DIR BACKUP_DIR
|
|
node <<'NODE'
|
|
const path = require('path');
|
|
|
|
const sourceDir = process.env.SOURCE_DIR;
|
|
const backupDir = process.env.BACKUP_DIR;
|
|
const Database = require(path.join(sourceDir, 'node_modules', 'better-sqlite3'));
|
|
|
|
async function main() {
|
|
const db = new Database(path.join(sourceDir, 'data.db'), { readonly: true });
|
|
try {
|
|
await db.backup(path.join(backupDir, 'data.db'));
|
|
} finally {
|
|
db.close();
|
|
}
|
|
}
|
|
|
|
main().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|
|
NODE
|
|
if [ $? -eq 0 ]; then
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 数据库备份完成"
|
|
else
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 数据库备份失败"
|
|
exit 1
|
|
fi
|
|
|
|
# 备份 public 目录
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始备份 public 目录..."
|
|
cp -r "${SOURCE_DIR}/public" "${BACKUP_DIR}/public"
|
|
if [ $? -eq 0 ]; then
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] public 目录备份完成"
|
|
else
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] public 目录备份失败"
|
|
exit 1
|
|
fi
|
|
|
|
# 记录备份日志
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 备份完成: ${BACKUP_DIR}"
|
|
|
|
# 清理7天前的旧备份(可选)
|
|
find "${BACKUP_ROOT}" -type d -name "20*" -mtime +7 -exec rm -rf {} \; 2>/dev/null
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 旧备份清理完成"
|