Wget:命令行下载与 REST API 交互利器

本文深入探讨了 Wget 这一强大的命令行工具,详细讲解了如何使用它进行文件下载、管理网络中断,以及与 REST API 进行交互。文章涵盖了 Wget 的常用标志、常见问题解决方案、与 Curl 的对比、高级 API 调用、CI/CD 最佳实践、代理配置,以及如何利用 jq 处理 JSON 响应。通过实际案例,包括 DigitalOcean Droplet 的管理和自动化脚本,帮助开发者和系统管理员提升工作效率。

Wget 是一款功能强大的命令行网络工具,它支持 HTTP、HTTPS、FTP 和 FTPS 等多种协议,不仅可以用于下载文件,还能与 REST API 进行高效交互。Wget 具备处理不稳定网络连接的能力,支持断点续传,并能在后台运行,这些特性使其成为开发者、系统管理员和初学者进行文件下载和 API 自动化操作的理想选择。更重要的是,Wget 无需额外工具即可发送 GET、POST、PUT 和 DELETE 等 HTTP 请求。

前提条件

在开始使用 Wget 之前,请确保满足以下条件:

  • Wget 已安装:大多数 Linux 发行版都默认安装了 Wget。如果尚未安装,可以通过包管理器进行安装(例如 sudo apt install wgetsudo yum install wget)。
  • DigitalOcean 账户:若要跟随文章中与 DigitalOcean API 交互的示例,您需要一个 DigitalOcean 账户。
  • DigitalOcean 个人访问令牌:同样,为了与 DigitalOcean API 交互,需要生成一个个人访问令牌 (Personal Access Token)。

Wget 常用标志速查

下表汇总了 Wget 的常用命令行标志及其用途和示例,方便快速查阅:

标志 目的 示例 详情
-P DIR 保存到指定目录 wget -P Downloads/ URL 将文件下载到指定目录,若目录不存在则创建。
-q 静默模式 (无输出) wget -q URL 抑制除错误外的所有输出,适用于脚本或 cron 任务。
--show-progress 仅显示进度条 wget -q --show-progress URL -q 结合使用,仅显示进度条,方便监控下载进程。
-c 继续中断的下载 wget -c URL 继续下载部分文件,适用于大文件或网络不稳定的情况。
--limit-rate=RATE 限制下载速度 wget --limit-rate=200k URL 限制下载速度,避免占用过多带宽,支持 k (千字节/秒)、m (兆字节/秒) 等单位。
-O FILE 保存为指定文件名 wget -O file.txt URL 以指定文件名保存下载内容,忽略服务器原文件名。
-i FILE 从文件下载 URL wget -i list.txt 从文件中读取 URL 列表并逐个下载,适用于批量下载场景。
-b 后台运行下载 wget -b URL 在后台启动下载进程,默认输出到 wget-log 文件。
--tries=N 重试下载 N 次 wget --tries=3 URL 设置失败下载的重试次数,适用于不稳定连接或不可靠的服务器。
-T SECONDS 设置服务器响应超时 wget -T 5 URL 指定等待服务器响应的最大时间(秒),防止无限期挂起。
--header=STRING 添加 HTTP 请求头 wget --header="Authorization: Bearer TOKEN" URL 添加自定义 HTTP 头,常用于 API 认证。可多次使用以添加多个头。
--method=METHOD 指定 HTTP 方法 wget --method=post URL 覆盖默认的 GET 方法,允许发送 POST、PUT、DELETE 等请求,适用于 REST API 交互。通常与 --body-data 结合使用。

Wget 常见问题与解决方案

在使用 Wget 时,可能会遇到一些常见问题。下表列出了这些问题、可能的原因及其解决方案。

症状 可能原因 解决方案
文件保存为 name.ext.1.2 目标目录中已存在同名文件 显式覆盖:wget -O name.ext URL 或指定目录:wget -P Downloads/ URL
下载从 0% 重启 缺少续传标志或服务器不支持范围请求 使用 wget -c URL 续传。若服务器不支持,则重新下载或使用 curl -C - -o name.ext URL
传输速度非常慢/不稳定 带宽争用、服务器限流、网络不稳定 限速:wget --limit-rate=200k URL;增强鲁棒性:wget --tries=10 -T 10 -c URL
“command not found” Wget 未安装 sudo apt-get install -y wget (Debian/Ubuntu) 或 sudo yum install -y wget (RHEL/CentOS)。
403/404 错误 缺少认证头、URL 过期或路径错误 添加认证头:wget --header="Authorization: Bearer $TOKEN" URL;验证 URL;检查 API 范围。
API 请求 401 Unauthorized 令牌错误、缺少范围或错误头键 确保 Authorization: Bearer $DO_TOKEN;重新颁发所需范围的令牌;验证 API 路径中的组织/项目。
SSL connect errorcertificate verify failed 缺少 CA 链、系统时钟偏差、代理拦截 同步时间:sudo timedatectl set-ntp true;更新 CA 证书:sudo update-ca-certificates;若有企业代理,导入代理 CA 并使用 --ca-certificate=/path/ca.crt
卡住等待响应 服务器响应慢或连接挂起 设置超时:wget -T 5 URL 和重试:wget --tries=5 URL
保存部分 HTML 而非文件 重定向或认证墙 自动跟踪重定向 (默认) 或使用 -S --spider URL 检查;添加所需的请求头/cookie。
API JSON 与进度日志一起打印 未使用静默输出到标准输出 wget -qO- URLwget -q -O - URL 仅打印 API 负载。

下载文件

本节将通过一系列示例演示如何使用 Wget 进行文件下载操作。

  1. 创建工作目录:首先,创建一个用于存放下载文件的工作目录并进入该目录。
    mkdir -p DigitalOcean-Wget-Tutorial/Downloads && cd DigitalOcean-Wget-Tutorial
    
  2. 下载单个文件:直接指定 URL 即可下载文件。
    wget https://code.jquery.com/jquery-3.6.0.min.js
    
  3. 下载到指定目录:使用 -P 标志将文件下载到 Downloads/ 目录。
    wget -P Downloads/ https://code.jquery.com/jquery-3.6.0.min.js
    
  4. 关闭 Wget 输出:使用 -q 标志可以关闭 Wget 的详细输出,使其在后台静默运行。请注意,如果目标目录中存在同名文件,Wget 会自动在文件名后添加 .1, .2 等后缀。
    wget -q https://code.jquery.com/jquery-3.6.0.min.js
    
  5. 仅显示下载进度条:在静默模式下,结合 --show-progress 可以在不显示详细日志的情况下展示下载进度。
    wget -q --show-progress https://code.jquery.com/jquery-3.6.0.min.js
    
  6. 下载多个文件:创建一个文本文件(例如 images.txt),每行包含一个要下载的 URL。然后使用 -i 标志进行批量下载。
    # 创建 images.txt
    echo "https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg" > images.txt
    echo "https://cdn.pixabay.com/photo/2016/11/29/05/09/milk-1867499__340.jpg" >> images.txt
    
    # 批量下载
    wget -i images.txt -P Downloads/ -q --show-progress
    
  7. 限制下载速度:使用 --limit-rate 标志可以限制 Wget 的下载速度,避免占用过多带宽。
    wget --limit-rate 15k -P Downloads/ -q --show-progress https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg
    
  8. 覆盖已下载文件:使用 -O 标志可以指定输出文件名,这会覆盖目标位置的同名文件(如果存在)。
    wget -O image2.jpg -q --show-progress https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg
    
  9. 恢复中断的下载:如果在下载过程中中断(例如按 Ctrl+C),可以使用 -c 标志从中断处继续下载。这对于下载大文件或在不稳定网络环境下非常有用。
    # 启动下载,中途中断 (Ctrl-C)
    wget --limit-rate 1k -P Downloads/ -q --show-progress https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg
    
    # 恢复下载
    wget -c --limit-rate 1k -P Downloads/ -q --show-progress https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg
    
  10. 后台下载:使用 -b 标志可以在后台启动下载任务,Wget 会将日志输出到 wget-log 文件。您可以使用 tail -f wget-log 查看下载进度。
    wget -b https://cdn.pixabay.com/photo/2016/12/13/05/15/puppy-1903313__340.jpg
    
  11. 设置超时和重试次数
    • 设置超时:使用 -T 标志设置等待服务器响应的最大时间(秒)。
      wget -T 5 -q --show-progress https://code.jquery.com/jquery-3.6.0.min.js
      
    • 设置最大重试次数:使用 --tries 标志设置下载失败后的最大重试次数。设置为 inf 可以进行无限次重试。
      wget --tries=3 -q --show-progress https://code.jquery.com/jquery-3.6.0.min.js
      

Wget 与 Curl 用于 API 工作流的比较

在 API 交互方面,Wget 和 Curl 都是常用的命令行工具,但它们各有侧重。

简答:

  • Wget 主要用于下载或镜像文件,具有强大的重试和后台运行能力,适用于对请求头要求不复杂的简单请求。
  • Curl 则适用于需要精细 HTTP 特性(如多部分表单、高级认证流程、HTTP/2 设置)的场景。
任务 优先使用 Wget 优先使用 Curl
大文件/批量下载 (续传/后台) wget -c -b URL 较少用,需手动配置
简单 JSON GET/POST (带请求头) wget -qO- --header=… --method=post (两者皆可)
复杂 API (OAuth、mTLS、HTTP/2、代理) 不适合 丰富标志 (--http2, --form, --cacert, --proxy-*)
默认提供健壮的重试/指数退避 内置重试语义 部分 (需使用 --retry/--retry-max-time 自行脚本)
网站镜像 wget -r -np -k URL 不适合
精细控制请求/响应格式 不太灵活 请求头、请求体、文件上传表单更具人体工程学

经验法则: 如果你的脚本主要是“可靠地下载 N 个文件”,那么优先选择 Wget。如果你的脚本是“调用这个 API,具有复杂的认证和内容协商”,那么优先选择 Curl。当然,两者可以在同一个管道中混合使用,取长补短。

与 REST API 交互

通过 Wget,可以直接在终端发送 GET、POST、PUT 和 DELETE 等 HTTP 请求,无需安装外部程序。

在与 API 交互之前,建议将您的 DigitalOcean 令牌设置为环境变量,以避免在 shell 历史中泄露敏感信息:

export DO_TOKEN="paste-your-token-here"

API 常用操作示例

  • GET (查询参数到标准输出): 使用 -qO- 标志将响应体输出到标准输出,--header 添加请求头。
    wget -qO- \
      --header="Accept: application/json" \
      "https://jsonplaceholder.typicode.com/posts?_limit=2"
    
  • POST (JSON 请求体): 使用 --method=post 指定 POST 方法,--body-data 传递请求体。
    wget -qO- \
      --method=post \
      --header="Content-Type: application/json" \
      --header="Accept: application/json" \
      --body-data '{"title":"Wget POST","body":"Example body","userId":1}' \
      https://jsonplaceholder.typicode.com/posts
    
  • PUT (替换资源): 使用 --method=put 指定 PUT 方法,--body-data 传递请求体。
    wget -qO- \
      --method=put \
      --header="Content-Type: application/json" \
      --header="Accept: application/json" \
      --body-data '{"title":"Updated","body":"Updated body","userId":1,"id":1}' \
      https://jsonplaceholder.typicode.com/posts/1
    
  • DELETE (幂等删除): 使用 --method=delete 指定 DELETE 方法。
    wget -qO- \
      --method=delete \
      --header="Accept: application/json" \
      https://jsonplaceholder.typicode.com/posts/1
    
  • 多个请求头模式: 使用多个 --header 标志来添加多个请求头。
    wget -qO- \
      --header="Authorization: Bearer $DO_TOKEN" \
      --header="Content-Type: application/json" \
      URL_HERE
    
  • 在有损网络上进行弹性 API 调用: 结合 -c (续传)、--tries (重试) 和 -T (超时) 标志,提高 API 调用的鲁棒性。
    wget -qO- -c --tries=8 -T 10 \
      --method=post \
      --header="Authorization: Bearer $DO_TOKEN" \
      --header="Content-Type: application/json" \
      --body-data '{"ping":"pong"}' \
      https://api.example.com/v1/endpoint
    

CI/CD 和可靠性最佳实践

在持续集成/持续部署 (CI/CD) 环境或需要高可靠性的自动化脚本中,使用 Wget 时应遵循以下最佳实践:

  • 在 CI 中使用 -qO-:为了保持 CI 日志简洁,仅打印 API 响应体,避免冗余的 Wget 状态信息。
  • 始终将 --tries-T (超时) 配对:设置重试次数和超时时间,可以防止因网络瞬时故障或服务器响应缓慢而导致构建停滞或无限期挂起。
  • 优先使用环境变量 ($DO_TOKEN):避免将敏感令牌直接写入脚本或命令行,通过环境变量传递可以有效防止信息泄露。
  • 默认续传大型文件:对于下载大型文件,应始终添加 -c 标志以启用续传功能,这在网络不稳定或下载中断时尤为重要。
  • 记录工具版本 (wget --version):在自动化脚本中记录 Wget 的版本信息,有助于确保环境的可重现性,并在出现问题时进行调试。

Wget 提供了灵活的配置选项来处理代理、自定义 User-Agent 以及管理 Cookie。

  • HTTP/HTTPS 代理:通过设置 http_proxyhttps_proxy 环境变量来配置代理。
    export http_proxy="http://proxy.corp:3128"
    export https_proxy="http://proxy.corp:3128"
    wget -qO- https://example.com/status
    
  • 自定义 User-Agent:使用 --user-agent 标志可以自定义 HTTP 请求中的 User-Agent 头,这对于模拟特定浏览器或标识您的应用程序很有用。
    wget -qO- --user-agent="WgetTutorial/1.0 (+https://yourdomain.example)" https://api.example.com/status
    
  • 持久化和重用 Cookie
    • 使用 --save-cookies cookies.txt 将会话中的 Cookie 保存到指定文件。
    • 使用 --keep-session-cookies 确保会话 Cookie 也被保存。
    • 使用 --load-cookies cookies.txt 在后续请求中加载并重用之前保存的 Cookie。
    # 登录并保存 Cookie
    wget --save-cookies cookies.txt --keep-session-cookies https://site.example.com/login
    
    # 使用保存的 Cookie 访问受保护的资源
    wget --load-cookies cookies.txt -O report.csv "https://site.example.com/reports?id=123"
    

使用 jq 保存和美化打印 JSON 响应

当 Wget 返回 JSON 格式的 API 响应时,结合 jq 工具可以方便地保存、美化打印以及解析 JSON 数据。

  1. 安装 jq (如果尚未安装):
    • 对于 Debian/Ubuntu 系统:
      sudo apt-get update && sudo apt-get install -y jq
      
    • 对于 RHEL/CentOS 系统:
      sudo yum install -y jq
      
  2. 保存 API 响应并美化打印:使用 wget -qO 将 JSON 响应保存到文件,然后用 jq . 对文件内容进行美化打印。
    wget -qO response.json --header="Accept: application/json" \
      "https://jsonplaceholder.typicode.com/posts?_limit=2"
    jq . response.json
    
    这将输出格式化的 JSON 数据,使其更易读。
  3. 从 JSON 中提取字段:使用 jq 的路径表达式可以轻松提取 JSON 对象中的特定字段。例如,提取第一个元素的 id 字段:
    jq -r '.[0].id' response.json
    
    -r 标志用于输出原始字符串,而不是 JSON 格式的字符串。

创建和管理 DigitalOcean Droplet

通过 Wget,您可以直接与 DigitalOcean API 交互,实现 Droplet 的创建、列出和删除等操作。

  1. 创建 Droplet (使用 $DO_TOKEN 环境变量和 Ubuntu 24.04 x64 镜像):
    wget --method=post -qO- \
      --header="Content-Type: application/json" \
      --header="Authorization: Bearer $DO_TOKEN" \
      --body-data='{"name":"Wget-example","region":"nyc1","size":"s-1vcpu-1gb","image":"ubuntu-24-04-x64","tags":["Wget-tutorial"]}' \
      https://api.digitalocean.com/v2/droplets
    
  2. 列出带有特定标签的 Droplet
    wget -qO- \
      --header="Content-Type: application/json" \
      --header="Authorization: Bearer $DO_TOKEN" \
      "https://api.digitalocean.com/v2/droplets?tag_name=Wget-tutorial"
    
  3. 删除 Droplet (请将 your_droplet_id 替换为实际的 Droplet ID):
    wget --method=delete -qO- \
      --header="Content-Type: application/json" \
      --header="Authorization: Bearer $DO_TOKEN" \
      "https://api.digitalocean.com/v2/droplets/your_droplet_id"
    

网站下载器 MCP Server (基于 Wget 的高级网站镜像)

Website Downloader MCP Server 是一个封装了 wget 的高级工具,旨在创建高保真的离线网站镜像。它能够保留网站结构、重写链接以供本地导航,并限制镜像范围。

主要参数:

  • url (字符串, 必需):要镜像的网站根 URL。
  • outputPath (字符串, 可选):镜像网站的本地保存目录。
  • depth (整数, 可选):跟踪链接的最大递归深度(0 表示仅下载当前页面,1 表示下载当前页面及其直接链接资源,以此类推)。
  • extraWgetArgs (字符串数组, 可选, 高级):额外的 wget 命令行参数,用于进一步自定义镜像过程。

核心 Wget 标志(MCP Server 内部使用):

  • -r / --recursive:启用递归下载,镜像整个站点或其部分。
  • -l / --level <depth>:设置最大递归深度。
  • --page-requisites:确保所有 HTML 页面显示所需的资产(图像、CSS、JS)都被下载。
  • --convert-links:重写 HTML 文件中的链接,使其指向本地副本,以便离线浏览。
  • --adjust-extension:根据内容类型调整下载文件的扩展名。
  • --no-parent:防止 Wget 爬取起始 URL 上方的父目录。
  • --domains <list>:将下载限制在指定域内。

示例 (浅层镜像):

以下 JSON 配置展示了如何使用 MCP Server 进行浅层镜像:

{
  "url": "https://example.com",
  "outputPath": "/path/to/output",
  "depth": 1
}

对应的 wget 命令(MCP Server 在后台执行):

wget \
  --recursive \
  --level 1 \
  --page-requisites \
  --convert-links \
  --adjust-extension \
  --no-parent \
  --domains example.com \
  --directory-prefix "/path/to/output" \
  https://example.com

Wget 的高级边缘操作

在特定场景下,Wget 需要一些高级配置和处理技巧。

  • 处理企业 TLS 拦截:在企业环境中,代理服务器可能会拦截并重新加密 TLS 流量。这时需要使用 --ca-certificate=/path/to/ca.crt 导入代理的根证书。同时,保持 CA 证书包更新 (sudo update-ca-certificates) 并同步系统时钟 (sudo timedatectl set-ntp true) 是确保 TLS 连接成功的关键。
  • 处理非 2xx 响应和退出代码:Wget 在执行完成后会设置退出代码:0 表示成功,4 表示网络失败,8 表示服务器错误。您可以使用 wget --spider --server-response URL || echo "API down" 来测试端点,并在非成功响应时触发自定义逻辑。
  • PUT 和 DELETE 的幂等性:在使用 --method 发送 PUT 或 DELETE 请求时,务必确保 API 端点是幂等的。这意味着重复执行相同的请求不会产生额外的副作用或导致数据不一致。
  • 验证大文件下载的完整性:对于关键的大文件下载,在下载完成后,应使用校验和工具(如 sha256sum -c)来验证文件的完整性,以防止数据在传输过程中损坏。

性能基准测试:Wget 在实际世界中的表现

使用 /usr/bin/time 工具可以衡量 Wget 命令的性能,包括挂钟时间 (wall time)、CPU 使用率、内存消耗和退出代码,这对于优化下载策略和调试问题非常有用。

以下是一些性能基准测试示例:

  1. 基线下载 (不限速)
    TEST_URL="https://speed.hetzner.de/100MB.bin" # 替换为实际的测试 URL
    OUT="test_file_100MB.bin"
    
    /usr/bin/time -f 'wall=%E user=%U sys=%S rss=%MKB exit=%x' \
      wget -q --show-progress -O "$OUT" "$TEST_URL"
    ls -lh "$OUT"
    
  2. 带宽限制下载 (--limit-rate): 删除旧文件,然后使用 --limit-rate 限制下载速度。
    rm -f "$OUT"
    /usr/bin/time -f 'wall=%E user=%U sys=%S rss=%MKB exit=%x' \
      wget -q --show-progress --limit-rate=200k -O "$OUT" "$TEST_URL"
    
    预期挂钟时间会因带宽限制而显著增加。
  3. 中断后恢复 (-c): 先启动下载并手动中断,然后使用 -c 标志恢复下载。请注意,服务器必须支持范围请求 (Range Requests) 才能成功续传。
    rm -f "$OUT"
    # 启动下载并等待几秒后中断
    wget --limit-rate=1m -O "$OUT" "$TEST_URL" &
    PID=$!; sleep 3; kill -INT "$PID" 2>/dev/null || true
    
    # 恢复下载
    /usr/bin/time -f 'wall=%E user=%U sys=%S rss=%MKB exit=%x' \
      wget -q --show-progress -c -O "$OUT" "$TEST_URL"
    
    预期恢复后的下载任务会更快完成,因为只下载了剩余部分。
  4. 不稳定端点的有限重试: 测试 Wget 在连接到无效 URL 时,结合 --tries-T 进行有限重试的表现。
    BAD_URL="https://example.invalid/bogus.bin"
    /usr/bin/time -f 'wall=%E user=%U sys=%S rss=%MKB exit=%x' \
      wget --spider --tries=3 -T 5 "$BAD_URL" || echo "bounded failure (as expected)"
    
    预期挂钟时间会近似于 重试次数 × 超时时间

最佳实践结论:

  • 使用 --limit-rate 可以有效节省网络带宽容量。
  • 优先使用 -c 进行大型文件下载的续传。
  • 始终将 --tries-T 配对使用,以限制失败操作的总时间。
  • 在 CI/CD 中,记录工具版本和关键性能指标(可输出为 CSV 格式),以实现可防御的 SLO (Service Level Objectives)。

实施:每日 Wget 自动化 (Cron 就绪)

本节提供一个端到端的示例,展示如何创建一个 Cron 就绪的脚本,实现每日可靠地批量下载资产,并在完成后通知 API。

  1. 设置

    • 创建一个文本文件 /var/backups/assets/files.txt,每行包含一个要下载的 URL。
    • 确保您的 DO_TOKEN 环境变量已设置。
  2. 脚本 (/usr/local/bin/wget-daily-sync.sh):

    #!/usr/bin/env bash
    # 严格模式:遇到错误立即退出,未定义变量视为错误,管道命令链中任一失败则退出
    set -euo pipefail
    
    ASSET_DIR="/var/backups/assets"
    URL_LIST="${ASSET_DIR}/files.txt"
    LOG_FILE="/var/log/wget-sync.log"
    
    # 创建资产目录(如果不存在)
    mkdir -p "${ASSET_DIR}"
    
    echo "$(date -Is) - Starting daily asset sync..." >> "${LOG_FILE}"
    
    # 使用 Wget 批量下载所有资产,具备弹性、静默和进度显示
    # --continue (-c) 续传已下载部分
    # --input-file (-i) 从文件读取 URL 列表
    # --directory-prefix (-P) 指定下载目录
    # --tries=8 -T 10 设置重试次数和超时,增强鲁棒性
    # -q --show-progress 静默模式但显示进度条
    # 2>>"${LOG_FILE}" 将标准错误(包括进度条信息)重定向到日志文件
    wget --continue \
         --input-file="${URL_LIST}" \
         --directory-prefix="${ASSET_DIR}" \
         --tries=8 -T 10 \
         -q --show-progress 2>>"${LOG_FILE}"
    
    echo "$(date -Is) - Asset sync completed." >> "${LOG_FILE}"
    
    # 可选:通知后端服务(请替换为您的实际 API 端点)
    if [[ -n "${DO_TOKEN:-}" ]]; then # 检查 DO_TOKEN 是否已设置且非空
      echo "$(date -Is) - Notifying backend API..." >> "${LOG_FILE}"
      wget -qO- --method=post \
        --header="Authorization: Bearer ${DO_TOKEN}" \
        --header="Content-Type: application/json" \
        --body-data "{\"synced\":\"$(date -Is)\",\"count\":$(wc -l < "${URL_LIST}")}" \
        https://api.example.com/v1/sync >/dev/null 2>>"${LOG_FILE}" # API 响应重定向到 /dev/null
      echo "$(date -Is) - Backend notification sent." >> "${LOG_FILE}"
    else
      echo "$(date -Is) - DO_TOKEN not set, skipping backend notification." >> "${LOG_FILE}"
    fi
    
    echo "$(date -Is) - Daily sync script finished." >> "${LOG_FILE}"
    
  3. 使其可执行: 将脚本文件设置为可执行。

    sudo install -m 0755 ./wget-daily-sync.sh /usr/local/bin/wget-daily-sync.sh
    
  4. 使用 Cron 调度: 编辑系统的 Cron 表,以每日特定时间运行此脚本。例如,在每日 02:15 运行。

    sudo crontab -e
    

    然后添加以下行:

    15 2 * * * /usr/local/bin/wget-daily-sync.sh
    

    这将确保脚本每天凌晨 2 点 15 分自动执行,实现资产的定期同步。

结论

本教程详细介绍了 Wget 这一多功能命令行工具的强大之处,包括如何高效地下载文件、应对网络不稳定带来的挑战,以及与各种 REST API 端点进行交互。您学习了 Wget 的常用标志、常见问题解决方案、与 Curl 的功能对比,并掌握了 CI/CD 环境中的可靠性最佳实践。通过实际操作,您了解了如何利用 jq 处理 JSON 响应,甚至学会了使用 Wget 创建和管理 DigitalOcean Droplet。最后,我们提供了一个 Cron 就绪的自动化脚本示例,展示了如何将 Wget 集成到日常运维和自动化工作流中,从而显著提升效率和可靠性。掌握 Wget 将为您的开发和运维工作带来极大的便利。

关于

关注我获取更多资讯

公众号
📢 公众号
个人号
💬 个人号
使用 Hugo 构建
主题 StackJimmy 设计