setup_backup_cron.sh•6.11 kB
#!/bin/bash
# MemOS定时备份设置脚本
# 用于配置cron定时任务
set -e
MEMOS_DIR="/home/qqinshu/视频/MemOS"
BACKUP_SCRIPT="$MEMOS_DIR/backup_simple.sh"
LOG_FILE="$MEMOS_DIR/memos_data/backups/backup.log"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}ℹ️ $1${NC}"
}
log_success() {
echo -e "${GREEN}✅ $1${NC}"
}
log_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}❌ $1${NC}"
}
# 显示帮助信息
show_help() {
echo "MemOS定时备份设置脚本"
echo ""
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " -h, --help 显示此帮助信息"
echo " -s, --status 显示当前定时任务状态"
echo " -i, --install 安装定时备份任务"
echo " -r, --remove 移除定时备份任务"
echo " -t, --test 测试备份脚本"
echo ""
echo "默认定时任务:"
echo " 每天凌晨2点执行备份"
echo " 日志保存到: $LOG_FILE"
}
# 检查cron服务状态
check_cron_service() {
if systemctl is-active --quiet cron 2>/dev/null || systemctl is-active --quiet crond 2>/dev/null; then
log_success "cron服务正在运行"
return 0
else
log_warning "cron服务未运行,尝试启动..."
if sudo systemctl start cron 2>/dev/null || sudo systemctl start crond 2>/dev/null; then
log_success "cron服务启动成功"
return 0
else
log_error "无法启动cron服务"
return 1
fi
fi
}
# 显示当前定时任务状态
show_status() {
log_info "检查当前定时任务状态..."
# 检查是否存在MemOS备份任务
if crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
log_success "MemOS定时备份任务已配置"
echo ""
log_info "当前配置:"
crontab -l 2>/dev/null | grep "$BACKUP_SCRIPT"
echo ""
else
log_warning "未找到MemOS定时备份任务"
fi
# 显示最近的备份文件
log_info "最近的备份文件:"
if ls "$MEMOS_DIR/memos_data/backups/"memos_backup_*.tar.gz 1> /dev/null 2>&1; then
ls -lht "$MEMOS_DIR/memos_data/backups/"memos_backup_*.tar.gz | head -5
else
log_warning "未找到任何备份文件"
fi
}
# 安装定时备份任务
install_cron_job() {
log_info "安装MemOS定时备份任务..."
# 检查备份脚本是否存在
if [ ! -f "$BACKUP_SCRIPT" ]; then
log_error "备份脚本不存在: $BACKUP_SCRIPT"
exit 1
fi
# 确保脚本可执行
chmod +x "$BACKUP_SCRIPT"
# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"
# 检查是否已存在任务
if crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
log_warning "定时备份任务已存在,是否要更新?(y/N)"
read -r response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
log_info "取消安装"
exit 0
fi
# 移除现有任务
remove_cron_job_silent
fi
# 添加新的cron任务 - 个人电脑使用场景优化
(crontab -l 2>/dev/null; echo "# MemOS自动备份任务 - 个人电脑使用时段执行") | crontab -
(crontab -l 2>/dev/null; echo "# 每天上午10点执行(通常开机时段)") | crontab -
(crontab -l 2>/dev/null; echo "0 10 * * * $BACKUP_SCRIPT >> $LOG_FILE 2>&1") | crontab -
(crontab -l 2>/dev/null; echo "# 每天下午6点执行(下班前备份)") | crontab -
(crontab -l 2>/dev/null; echo "0 18 * * * $BACKUP_SCRIPT >> $LOG_FILE 2>&1") | crontab -
if [ $? -eq 0 ]; then
log_success "定时备份任务安装成功"
log_info "任务配置: 每天上午10点和下午6点执行备份"
log_info "日志文件: $LOG_FILE"
log_warning "注意: 个人电脑需要在这些时间段开机才能执行备份"
else
log_error "定时备份任务安装失败"
exit 1
fi
}
# 静默移除定时任务(内部使用)
remove_cron_job_silent() {
crontab -l 2>/dev/null | grep -v "$BACKUP_SCRIPT" | grep -v "# MemOS自动备份任务" | crontab -
}
# 移除定时备份任务
remove_cron_job() {
log_info "移除MemOS定时备份任务..."
if crontab -l 2>/dev/null | grep -q "$BACKUP_SCRIPT"; then
remove_cron_job_silent
if [ $? -eq 0 ]; then
log_success "定时备份任务移除成功"
else
log_error "定时备份任务移除失败"
exit 1
fi
else
log_warning "未找到MemOS定时备份任务"
fi
}
# 测试备份脚本
test_backup() {
log_info "测试备份脚本..."
if [ ! -f "$BACKUP_SCRIPT" ]; then
log_error "备份脚本不存在: $BACKUP_SCRIPT"
exit 1
fi
# 执行备份脚本
log_info "执行备份脚本(这可能需要几分钟)..."
if "$BACKUP_SCRIPT"; then
log_success "备份脚本测试成功"
else
log_error "备份脚本测试失败"
exit 1
fi
}
# 主函数
main() {
echo "⏰ MemOS定时备份设置脚本"
echo "========================"
# 检查cron服务
if ! check_cron_service; then
exit 1
fi
# 解析命令行参数
case "${1:-}" in
-h|--help)
show_help
exit 0
;;
-s|--status)
show_status
exit 0
;;
-i|--install)
install_cron_job
;;
-r|--remove)
remove_cron_job
;;
-t|--test)
test_backup
;;
"")
log_info "请指定操作选项,使用 -h 查看帮助"
show_help
exit 1
;;
*)
log_error "未知选项: $1"
show_help
exit 1
;;
esac
}
# 运行主函数
main "$@"