Berpindah dari pekerjaan manual ke otomasi: scripting Bash & PowerShell, penjadwalan dengan cron/scheduled tasks, dan praktik mengotomasi task rutin sysadmin agar tidak mengulang pekerjaan yang sama dua kali.

Sejauh ini kalian melakukan banyak hal secara manual: install paket, buat user, restart service, backup. Semua itu benar — tetapi tidak akan scalable. Inilah momen transformasi: episode 12 mengubah kalian dari "orang yang mengetik perintah" menjadi "orang yang menulis perintah sekali, lalu mengulangnya ribuan kali tanpa kesalahan".
Otomasi bukan kemalasan — ini disiplin. Pekerjaan manual yang berulang adalah sumber kesalahan manusia terbesar di IT. Sysadmin yang baik menghapus pekerjaannya sendiri dengan mengotomasinya.
| Tanpa Otomasi | Dengan Otomasi |
|---|---|
| 30 menit per server, rawan salah ketik | 5 menit sekali untuk semua server |
| Hanya yang ingat yang dijalankan | Dieksekusi terjadwal, konsisten |
| Bergantung pada satu orang | Berjalan tanpa manusia |
| Sulit diaudit | Setiap langkah tercatat |
Aturan yang akan kalian dengar sepanjang karier: "If you do it twice, automate it." Otomasi juga menjadi pintu masuk ke configuration management (episode 13) — di mana konfigurasi server dideklarasikan, bukan diketik ulang.
Bash adalah bahasa otomasi utama di Linux. Sebuah script sysadmin yang baik punya struktur: shebang, exit code, dan logika error.
#!/usr/bin/env bash
set -euo pipefail
SRC="/srv/data"
DEST="/srv/backup-repo"
LOG="/var/log/backup-data.log"
echo "[$(date '+%F %T')] mulai backup" >> "$LOG"
restic -r "$DEST" backup "$SRC" --password-file /etc/restic/pw >> "$LOG" 2>&1
echo "[$(date '+%F %T')] selesai, exit=$?" >> "$LOG"Tiga hal penting:
set -euo pipefail — berhenti saat error (-e), variabel kosong ditolak (-u), kegagalan di tengah pipe tidak ditelan (-o pipefail).Beri izin eksekusi lalu jalankan:
chmod +x /usr/local/bin/backup-data.sh
/usr/local/bin/backup-data.sh
echo $?Untuk Windows Server, PowerShell memegang peran yang sama. Polanya identik: variabel, logika, logging.
$ErrorActionPreference = "Stop"
$Src = "\\srv-fs-01\shared"
$Dest = "D:\Backups"
$Log = "C:\Logs\backup-share.log"
if (-not (Test-Path $Dest)) { New-Item -ItemType Directory -Path $Dest }
Copy-Item -Path $Src -Destination $Dest -Recurse -Force
Add-Content -Path $Log -Value "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] backup selesai"$ErrorActionPreference = "Stop" adalah padanan set -e: menghentikan eksekusi saat error, sehingga kegagalan tidak lolos diam-diam.
cron adalah penjadwal klasik Linux. Format crontab: menit jam hari-bulan bulan hari-minggu perintah.
crontab -e
# jalankan pukul 02:30 setiap hari
30 2 * * * /usr/local/bin/backup-data.sh
# jalankan setiap Minggu 03:00 dan kirim hasilnya
0 3 * * 0 /usr/local/bin/backup-weekly.shVerifikasi jadwal terpasang:
crontab -l
grep CRON /var/log/syslog | tail -10$Action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\backup-share.ps1"
$Trigger = New-ScheduledTaskTrigger -Daily -At "02:30AM"
Register-ScheduledTask -TaskName "Backup Share" -Action $Action -Trigger $Trigger
Get-ScheduledTask -TaskName "Backup Share"Tip
Cron hanya menjalankan perintah — ia tidak peduli apakah hasilnya berhasil. Selalu rancang script yang mencatat hasil ke log dan (untuk yang kritis) memberi tahu jika gagal. Otomasi tanpa visibilitas hanyalah kegagalan yang berjalan rapi sesuai jadwal.
Important
Jangan menaruh logika penting hanya di cron — script harus bisa dijalankan manual dengan hasil yang sama. Cron seharusnya hanya "pemicu"; logika hidup di script. Ini membuat pengujian, debugging, dan pemindahan ke Ansible (episode 13) jauh lebih mudah.
/usr/bin/restic, bukan restic).Latihan terpadu: otomasi pembersihan log lama + backup harian.
#!/usr/bin/env bash
set -euo pipefail
LOG="/var/log/cleanup.log"
# Hapus file log audit yang lebih tua dari 30 hari
find /var/log/audit -type f -name "*.log" -mtime +30 -delete
echo "[$(date '+%F %T')] cleanup selesai" >> "$LOG"Simpan, chmod +x, daftarkan di cron, lalu jalankan manual sekali untuk verifikasi — dan buka lognya untuk memastikan tercatat.
Inti yang harus dibawa pulang dari episode 12:
set -euo pipefail / $ErrorActionPreference="Stop", variabel, dan logging.Di episode 13 selanjutnya kita akan membahas Configuration Management dengan Ansible — playbook, inventory, dan idempotency untuk mengelola banyak server sekaligus, dengan praktik manage fleets di lab. Ini akan mengubah cara kalian memandang "mengelola server" selamanya!