Belajar Cron Job - Otomasi Backup & Maintenance
Episode 10 of 23

Belajar Cron Job - Otomasi Backup & Maintenance

Backup dan maintenance adalah alasan paling umum orang memakai cron. Episode ini menjadwalkan rsync, restic, dan pg_dump dengan benar, memverifikasi hasil backup agar tidak asal jalan, lalu menangani logrotate, cleanup tmp, dan update paket yang perlu kehati-hatian.

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

Pendahuluan

Di episode 9 kita membangun fondasi keandalan: lock, retry, idempotency, timeout. Sekarang kita terapkan pada penggunaan cron yang paling khas: backup dan maintenance.

Penting untuk luruskan ekspektasi dulu: menjadwalkan backup hanyalah setengah pekerjaan. Backup yang tidak pernah diverifikasi bukanlah backup — ia hanya harapan. Episode ini membahas cara menjadwalkan backup dengan benar sekaligus memastikannya benar-benar bisa dipulihkan.

Backup Terjadwal

rsync: Sinkronisasi Lokal

rsync sempurna untuk backup file ke disk lokal atau server lain — dan idempotent secara alami:

Crontab backup rsync harian
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
 
30 2 * * * flock -n /var/lock/rsync.lock rsync -avz --delete /data/ backup@nas:/backup/data/ >> /var/log/backup.log 2>&1

--delete membuat target mencerminkan source (operasi idempotent). Tambahkan timeout bila koneksi sering melambat.

restic: Backup Terdeduplikasi ke Storage

restic adalah tool backup modern dengan deduplikasi, enkripsi, dan snapshot:

Crontab backup restic
30 2 * * * flock -n /var/lock/restic.lock \
    restic -r s3:s3.amazonaws.com/bucket backup /data >> /var/log/backup.log 2>&1

Secrets restic (repo password) jangan ditaruh di crontab — simpan di env file dengan permission 600 (kita bahas di episode 14):

Env file restic (600)
RESTIC_REPOSITORY=s3:s3.amazonaws.com/bucket
RESTIC_PASSWORD=very-strong-secret

pg_dump: Backup Database

Backup PostgreSQL memerlukan pg_dump (dump logis) atau pg_basebackup (fisik). Untuk database kecil-menengah, dump logis cukup:

Crontab backup PostgreSQL
30 3 * * * pg_dump -h localhost -U backup_user -Fc mydb > /backup/mydb-$(date +%F).dump 2>> /var/log/backup.log

Perhatikan 2>> — stderr di-append ke log sementara stdout (file dump) ditulis dengan >.

Warning

Saat mengotomasi pg_dump, pertimbangkan retention: file mydb-2026-08-13.dump menumpuk selamanya tanpa pembersihan. Tambahkan aturan hapus otomatis, misalnya find /backup -name "*.dump" -mtime +14 -delete, atau gunakan tool dengan retention bawaan seperti restic.

Verifikasi Hasil Backup

Backup perlu dibuktikan, bukan diasumsikan. Tiga tingkat verifikasi:

Verifikasi ukuran dan exit code
# Di dalam script backup
if [ $? -ne 0 ] || [ ! -s /backup/mydb.dump ]; then
    echo "Backup gagal!" >> /var/log/backup.log
    exit 1
fi

-s memastikan file tidak kosong. Exit code non-0 berarti dump tidak lengkap.

restic punya perintah verifikasi bawaan — jadwalkan secara berkala:

Verifikasi restic mingguan
0 4 * * 0 restic -r s3:s3.amazonaws.com/bucket check --read-data >> /var/log/restic-check.log 2>&1

Langkah terakhir yang paling penting: restore test berkala — pulihkan backup ke database/file sementara, idealnya bulanan. Jika restore tidak pernah diuji, kalian tidak tahu backup itu berfungsi sampai terlambat.

Maintenance Terjadwal

logrotate: Putar Log (Sudah Via Cron)

logrotate dijalankan secara harian oleh cron di hampir semua distro:

Cek jadwal logrotate
cat /etc/cron.d/logrotate

Konfigurasi ada di /etc/logrotate.conf dan /etc/logrotate.d/. Pastikan log job cron kalian punya aturan sendiri (contohnya di episode 5).

Cleanup File Temporary

File /tmp dan cache bisa mengisi disk tanpa disadari:

Cleanup /tmp harian
0 5 * * * find /tmp -type f -mtime +7 -delete >> /var/log/cleanup.log 2>&1

Berhati-hatilah: jangan hapus file yang masih dipakai proses lain — batasi umur (-mtime +7) dan folder spesifik.

Update Paket (Dengan Hati-Hati)

Mengotomasi apt upgrade atau dnf update penuh risiko: update bisa merusak dependensi atau memicu restart layanan. Praktik yang lebih aman:

  • Otomasi update saja (refresh index), bukan upgrade penuh.
  • Biarkan upgrade manual atau lewat pipeline CI dengan pengujian.
  • Jika terpaksa otomasi upgrade, lakukan di jam sepi dan setelah backup.
Update index saja (aman diotomasi)
0 6 * * * apt-get update >> /var/log/apt.log 2>&1

Caution

Jangan pernah menjadwalkan apt upgrade -y, dnf upgrade -y, atau yum update -y tanpa proses staging. Upgrade otomatis di server produksi adalah penyebab paling umum downtime yang "tanpa penyebab" — layanan restart, kernel berubah, dependensi patah, dan tidak ada yang menyaksikan.

Ringkasan Backup vs Maintenance

JenisContohFrekuensiPerhatian
Backup filersyncHarian--delete, lock
Backup snapshotresticHarianEnkripsi, retention
Backup DBpg_dumpHarianRestore test
Verifikasirestic checkMingguan--read-data
Rotasi loglogrotateOtomatisAturan per-log
Cleanupfind /tmpHarianJangan hapus aktif
Updateapt-get updateHarianHanya index

Penutup

Inti yang harus dibawa pulang:

  • Jadwalkan rsync/restic/pg_dump dengan flock dan timeout (episode 9).
  • Verifikasi backup: exit code, ukuran file, integritas, dan restore test.
  • Backup yang tidak pernah diverifikasi hanyalah harapan.
  • logrotate sudah jalan via cron — tinggal tambah aturan untuk log kalian.
  • Cleanup /tmp dengan hati-hati; update paket sebaiknya tidak sepenuhnya otomatis.

Di episode 11 selanjutnya kita akan membahas randomisasi dan avoid peak load — bagaimana sleep $((RANDOM % 300)) menyebarkan beban, memilih jam sepi 02.00-04.00, dan mencegah banyak host backup serentak menjatuhkan server!

Belajar Cron Job - Otomasi Backup & Maintenance | Belajar Cron Job