You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在远程服务器自动化任务并提取响应值用于后续命令执行

自动备份传输与Bash curl接口处理方案

1. 自动传输db_backups到Azure冷存储

1.1 前置依赖

  • 远程服务器安装Azure CLI 或 AzCopy工具
  • 已完成Azure存储账户的身份认证(可通过az login或者配置AzCopy的SAS令牌实现)

1.2 实现逻辑

  • 编写Shell脚本定期检测备份目录总大小,超过指定阈值后触发传输,指定上传到冷存储访问层
  • 通过crontab配置定时任务,无需人工值守

1.3 脚本示例

#!/bin/bash
# 自定义配置项
BACKUP_DIR="/data/db_backups"  # 替换为实际备份目录路径
SIZE_THRESHOLD=$((10*1024*1024*1024))  # 阈值设置为10G,单位字节,可自行调整
AZURE_STORAGE_ACC="your_storage_account" # 替换为Azure存储账户名
AZURE_CONTAINER="cold_backup_container" # 替换为冷存储容器名

# 计算备份目录当前总大小
CURRENT_SIZE=$(du -sb "$BACKUP_DIR" | awk '{print $1}')

if [ "$CURRENT_SIZE" -ge "$SIZE_THRESHOLD" ]; then
    echo "备份目录大小达到阈值,开始传输至Azure冷存储"
    # 方式1:使用Azure CLI传输
    az storage blob upload-batch \
      --source "$BACKUP_DIR" \
      --destination "$AZURE_CONTAINER" \
      --account-name "$AZURE_STORAGE_ACC" \
      --access-tier Cool \
      --only-show-errors
    
    # 方式2:使用AzCopy传输(性能更优)
    # azcopy sync "$BACKUP_DIR" "https://$AZURE_STORAGE_ACC.blob.core.windows.net/$AZURE_CONTAINER/db_backups/" --access-tier Cool

    # 传输成功后可添加清理本地旧备份逻辑
    # find "$BACKUP_DIR" -type f -mtime +7 -delete
fi

1.4 定时任务配置

执行crontab -e添加如下配置,每天凌晨0点执行一次检测,日志写入指定文件:

0 0 * * * /bin/bash /path/to/your/backup_transfer.sh >> /var/log/db_backup_transfer.log 2>&1

2. Bash中curl请求配置与JSON响应提取

2.1 授权头写法注意事项

包含变量的请求头必须使用双引号包裹,单引号会阻止Shell解析变量,导致$token无法被替换为实际值,这是授权报错的核心原因。

2.2 前置依赖

安装jq工具用于解析JSON响应,是Shell处理JSON的标准工具,避免用正则匹配导致的兼容性问题:

# Debian/Ubuntu系
sudo apt update && sudo apt install -y jq
# RHEL/CentOS系
sudo yum install -y jq

2.3 完整脚本示例

包含获取access_token、发送POST请求、提取key1的value全流程:

#!/bin/bash
# --------------------------
# 步骤1:获取access_token(替换为你实际的获取token的接口参数)
# --------------------------
TOKEN_RESP=$(curl -s -X POST "https://your-auth-endpoint.com/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=your_client_id&client_secret=your_client_secret&grant_type=client_credentials")
# 提取access_token,-r参数输出原始字符串不带引号
ACCESS_TOKEN=$(echo "$TOKEN_RESP" | jq -r '.access_token')

# 校验token是否获取成功
if [ -z "$ACCESS_TOKEN" ] || [ "$ACCESS_TOKEN" == "null" ]; then
  echo "获取access_token失败"
  exit 1
fi

# --------------------------
# 步骤2:发送目标POST请求
# --------------------------
API_RESP=$(curl -s -X POST "https://server.domain.com/v2/jobs/28723316-9373-44ba-9229-7c796f21b099/runs?project_id=aff59748-260a-476e-9578-b4f4a93e7a92" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '')

# --------------------------
# 步骤3:提取key1的value值
# --------------------------
KEY1_VAL=$(echo "$API_RESP" | jq -r '.keys[] | select(.keyName == "key1") | .value')
echo "提取到的key1值为:$KEY1_VAL"

2.4 可选:请求状态校验

如果需要判断接口请求是否成功,可通过获取HTTP状态码实现:

# 同时获取响应体和HTTP状态码
FULL_RESP=$(curl -s -w "||%{http_code}" -X POST "你的目标接口地址" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '')
RESP_BODY=$(echo "$FULL_RESP" | awk -F '||' '{print $1}')
HTTP_CODE=$(echo "$FULL_RESP" | awk -F '||' '{print $2}')

if [ "$HTTP_CODE" -ne 200 ]; then
  echo "请求失败,状态码:$HTTP_CODE,响应内容:$RESP_BODY"
  exit 1
fi

内容的提问来源于stack exchange,提问作者ABHISHEK KUMAR SINGH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 23:27:03