本文最后更新于 291 天前,其中的信息可能已经有所发展或是发生改变。
#!/bin/bash
# 宝塔面板配置
# /www/server/panel/config/api.json API_key:key,SECRET_KEY:token
BT_PANEL_URL="宝塔面板url地址"
API_KEY="/www/server/panel/config/api.json 里面的key字段"
SECRET_KEY="/www/server/panel/config/api.json 里面的token字段"
# 备份文件保存路径
BACKUP_DIR="备份的文件夹路径"
BACKUP_FILE="${BACKUP_DIR}/计划任务配置.json"
echo "========================================"
echo "宝塔面板计划任务配置自动备份脚本"
echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "面板地址: ${BT_PANEL_URL}"
echo "备份文件: ${BACKUP_FILE}"
echo "========================================"
# 第一步:创建备份目录(如果不存在)
echo "检查备份目录"
if [ ! -d "$BACKUP_DIR" ]; then
echo " ⚠ 备份目录不存在,创建中..."
mkdir -p "$BACKUP_DIR"
chown www:www "$BACKUP_DIR" 2>/dev/null || true
echo " ✓ 备份目录已创建: ${BACKUP_DIR}"
else
echo " ✓ 备份目录已存在: ${BACKUP_DIR}"
fi
# 第二步:创建新备份
echo "创建计划任务配置备份"
# 生成签名
TIME_STAMP=$(date +%s)
REQUEST_TOKEN=$(echo -n "${TIME_STAMP}${SECRET_KEY}" | md5sum | awk '{print $1}')
echo " 时间戳: ${TIME_STAMP}"
echo " 请求令牌: ${REQUEST_TOKEN}"
echo " API密钥: ${API_KEY}"
# 调用创建备份接口
echo " 正在调用备份接口..."
RESPONSE=$(curl -s -X POST "${BT_PANEL_URL}/crontab?action=export_crontab_to_json" \
-H "Authorization: bt-panel ${API_KEY}" \
-d "request_time=${TIME_STAMP}&request_token=${REQUEST_TOKEN}" \
--connect-timeout 30 \
--max-time 120)
echo " 原始响应: ${RESPONSE}"
# 解析响应
# 简单判断是否成功
if echo "$RESPONSE" | grep -q "true" && echo "$RESPONSE" | grep -q ".json"; then
# 直接查找/tmp下的文件
BACKUP_SOURCE=$(find /tmp -name "*计划任务*.json" -type f -mmin -5 2>/dev/null | head -1)
if [ -n "$BACKUP_SOURCE" ] && [ -f "$BACKUP_SOURCE" ]; then
cp "$BACKUP_SOURCE" "$BACKUP_FILE"
echo "备份成功: $BACKUP_FILE"
echo "文件大小: $(du -h "$BACKUP_FILE" | cut -f1)"
exit 0
else
echo "未找到临时备份文件"
exit 1
fi
else
echo " ✗ API调用失败"
echo " 响应内容: ${RESPONSE}"
fi
echo ""
echo "========================================"
echo "备份完成时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "备份状态: ✗ 失败"
echo "========================================"
exit 1