Belajar Wget - Scripting & Automation
Series/Belajar Wget/Episode 16
Episode 16 of 23

Belajar Wget - Scripting & Automation

Pada episode ini kita akan menjadikan wget mesin otomasi: memahami exit code untuk logika skrip, mode output yang ramah log, jadwal download lewat cron, serta integrasi di pipeline CI untuk mengambil artifact dan smoke test URL dengan spider.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 15 kalian membuat wget efisien — hanya yang berubah yang diunduh, dan semua dilakukan dengan sopan. Sekarang saatnya wget bekerja tanpa pengawasan. Skrip tidak membaca layar, tidak menilai hasil dengan mata, dan tidak akan pernah bangun di malam hari untuk melihat apakah download berhasil. Episode 16 mengajarkan bahasa yang justru dimengerti mesin: exit code, mode output yang ramah log, penjadwalan dengan cron, dan integrasi di pipeline CI/CD.

Exit Code: Bahasa Antara wget dan Skrip

Setiap kali wget selesai, ia keluar dengan sebuah exit code — angka yang menceritakan bagaimana proses berakhir. Ini satu-satunya hal yang bisa dibaca skrip secara andal, lewat variabel $?:

exit-check.sh
wget -q https://example.com/file.tar.gz
echo "wget keluar dengan kode: $?"

Kode yang paling penting untuk logika skrip:

  • 0 — sukses, tidak ada masalah.
  • 1 — error generik.
  • 2 — parse error (opsi, .wgetrc, atau .netrc).
  • 3 — file I/O error.
  • 4 — kegagalan jaringan.
  • 5 — verifikasi SSL gagal.
  • 6 — autentikasi user/password gagal.
  • 7 — error protokol.
  • 8 — server merespons dengan error (4xx/5xx).

Perhatikan dua yang paling sering muncul: 4 untuk jaringan dan 5 untuk sertifikat — keduanya menyimpan informasi diagnostik yang jauh lebih berguna daripada sekadar "gagal".

Mode Output: -q, -nv, -o, dan -a

Di layar, progress bar wget terlihat hidup. Di log, progress bar adalah sampah. Empat opsi mengendalikan perilaku output:

  • -q (alias --quiet) — mematikan semua output kecuali error.
  • -nv (alias --no-verbose) — mode ringkas: tetap menampilkan URL dan pesan penting, tanpa progress meter.
  • -o logfile — menulis pesan ke file, menimpa isi lama.
  • -a logfile (alias --append-output) — menulis pesan ke file, menambahkan ke isi lama.
logging.sh
wget -nv -a /var/log/mirror.log https://docs.example.com/

Kombinasi -nv -a adalah pasangan paling sehat untuk otomasi: output tidak membanjiri terminal, dan setiap jalankan menambah jejak ke file yang bisa diaudit — persis pola yang kita pakai di episode 15.

Tip

Di skrip yang dipanggil dari cron atau CI, -q cocok dipasangkan dengan pemeriksaan exit code — sukses berarti tenang, dan kegagalan menimbulkan suara lewat exit code yang bukan nol.

Pola if wget ...; then

Begitu wget berbicara lewat exit code, ia bisa masuk ke logika kondisional. Pola paling umum adalah if wget ...; then:

guard-if.sh
if wget -q --timestamping --directory-prefix="$HOME/data" \
  "https://api.example.com/dump.zip"; then
  echo "unduhan sukses"
else
  echo "unduhan gagal" >&2
  exit 1
fi

Pola ini membuat kegagalan wget mengubah alur skrip — bukan sekadar mencetak error di layar yang mungkin tidak pernah dibaca siapa pun. Di skrip yang tidak memakai pola ini, download yang gagal dianggap sukses hanya karena perintah selanjutnya masih dijalankan.

Skrip Download Terjadwal

Rangkai semuanya menjadi skrip yang berdiri sendiri — perwakilan dari yang akan kalian temui di dunia kerja:

unduh-harian.sh
#!/usr/bin/env bash
set -euo pipefail
 
URL="${1:-https://example.com/report/daily.csv}"
DEST="${2:-$HOME/data}"
LOG="$DEST/download.log"
 
mkdir -p "$DEST"
 
if wget --quiet --timestamping --directory-prefix="$DEST" "$URL"; then
  echo "$(date -u +%FT%TZ) OK $URL" >> "$LOG"
else
  code=$?
  echo "$(date -u +%FT%TZ) GAGAL kode=$code $URL" >> "$LOG"
  exit "$code"
fi

Bedah logikanya: set -euo pipefail menghentikan skrip pada error yang tak tertangani; --timestamping mencegah download ulang file yang sama; exit code ditangkap dan dicatat ke log dengan waktu; dan kegagalan diteruskan sebagai exit code — sinyal final untuk cron atau CI.

Cron: Penjadwal Sistem

cron adalah penjadwal bawaan sistem yang menjalankan perintah pada waktu tertentu. Skrip di atas tinggal didaftarkan:

crontab-entry
0 3 * * * /home/budi/bin/unduh-harian.sh >> /home/budi/data/cron.log 2>&1

Baris ini menjalankan skrip setiap pukul 03.00 — jam di mana jaringan sepi dan server tujuan sedang longgar. Dua hal yang sering menjebak pemula: cron berjalan dengan environment yang minimal, jadi gunakan path absolut di dalam skrip; dan output standar tidak terlihat siapa pun, jadi arahkan ke log dengan >> ... 2>&1 atau andalkan -a milik wget.

Important

Jadwal rutin adalah janji yang dipakai server. Pasangkan dengan --timestamping dan --waitretry dari episode 15 agar jadwal itu tidak pernah menjadi beban tak terkendali — download yang gagal mundur bertahap, bukan memukul server berulang kali.

CI/CD: wget di Pipeline

Pipeline CI/CD adalah rumah kedua wget: mengambil artifact, dependensi, atau dump database pada setiap build, dan memverifikasi URL sebelum rilis. Dua contoh di platform yang paling umum.

GitHub Actions: Mengambil Artifact

download-artifact.yml
name: Download Dump
on:
  schedule:
    - cron: '0 4 * * *'
jobs:
  fetch:
    runs-on: ubuntu-latest
    steps:
      - name: Ambil dump database
        run: |
          wget --quiet --timestamping \
            --header="Authorization: Bearer $TOKEN" \
            -P data/ "$DUMP_URL"
        env:
          DUMP_URL: ${{ secrets.DUMP_URL }}
          TOKEN: ${{ secrets.DUMP_TOKEN }}

Perhatikan detail yang membuat job ini sehat: URL dan token tidak pernah literal di file — keduanya dari secret store; --timestamping menghindari unduhan yang tidak perlu; dan -P data/ menempatkan file di direktori yang bisa dipakai langkah berikutnya.

GitLab CI: Smoke Test dengan --spider

--spider adalah mode khusus wget yang hanya memeriksa keberadaan URL tanpa mengunduh isinya — sempurna untuk smoke test:

.gitlab-ci.yml
smoke-test:
  stage: test
  image: ubuntu:24.04
  script:
    - apt-get update && apt-get install -y wget
    - wget --spider --quiet https://staging.example.com/health
    - wget --spider --quiet https://staging.example.com/api/v1/status

Jika sebuah URL menjawab dengan error 4xx/5xx, wget keluar dengan kode 8 dan langkah itu gagal — dan langkah yang gagal menggagalkan pipeline. Dengan --spider, kalian mendapat alarm pertama sebelum pengguna mengeluh, tanpa membebani server dengan download penuh.

Warning

Di CI, semua kredensial harus lewat secret store — di GitHub Actions ekspresi secrets di Settings, di GitLab CI variable di Settings. Jangan pernah menulis token literal di file YAML; file itu masuk ke git, dan riwayat git tidak pernah benar-benar bisa dibersihkan.

Penutup

Episode 16 mengubah wget menjadi mesin otomasi: memahami exit code dari 0 hingga 8 sebagai bahasa kegagalan, mengendalikan output dengan -q, -nv, -o, dan -a, memakai pola if wget ...; then untuk logika skrip, menjadwalkan unduhan harian dengan cron, serta mengintegrasikan wget di GitHub Actions dan GitLab CI untuk mengambil artifact dan smoke test dengan --spider.

Inti yang perlu diingat: skrip tidak membaca layar — ia membaca exit code. Ajari wget untuk berbicara dalam bahasa mesin, dan kalian bisa menyerahkan pekerjaan apa pun padanya tanpa pengawasan.

Di episode 17 berikutnya kita membawa wget ke level yang berbeda: WARC dan web archiving — merekam setiap request dan respons dalam format arsip web standar, menggabungkannya dengan crawl rekursif, dan menganalisis hasilnya. Sampai jumpa!

Belajar Wget - Scripting & Automation | Belajar Wget