Backup Script — Auto Backup ke Google Drive (`gdrive` + `cron`)

Catatan penjelasan detail terkait penggunaan gdrive untuk auto-backup bisa dilihat di:
Server Backup — Upload Otomatis ke Google Drive pakai gdrive dan cron

Requirement

Kebutuhan:

Script

File script /usr/local/bin/backup-gdrive.sh

#!/bin/bash

# Exit kalau error
set -e

# ==============================
# KONFIGURASI
# ==============================
BACKUP_DIR="/tmp"
SOURCE_DIR="/var/www/html"
DATE=$(date +"%Y-%m-%d_%H-%M-%S")

BACKUP_FILE="$BACKUP_DIR/backup_html_$DATE.tar.gz"
GDRIVE_FOLDER_ID="<FOLDER_ID>"

LOG_FILE="/var/log/backup-gdrive.log"
RETENTION_DAYS=7
ADMIN_EMAIL="admin@example.com"

log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

notify_failure() {
    echo "$1" | mail -s "Backup Server Gagal" "$ADMIN_EMAIL"
}

cleanup_old_local_backups() {
    find "$BACKUP_DIR" -name "backup_html_*.tar.gz" -mtime +$RETENTION_DAYS -delete
}

delete_old_gdrive_backups() {
    gdrive list --query "name contains 'backup_html_'" | \
    awk 'NR > 1 {print $1}' | \
    tail -n +8 | \
    xargs -I {} gdrive delete {}
}

{
    log "Backup dimulai"

	# Buat file archive
    tar -czf "$BACKUP_FILE" "$SOURCE_DIR"

	# Upload ke Google Drive
    gdrive upload --parent "$GDRIVE_FOLDER_ID" "$BACKUP_FILE"

	# Hapus file backup yang sudah melewati masa retensi RETENTION_DAYS
    cleanup_old_local_backups
    delete_old_gdrive_backups

    log "Backup berhasil: $BACKUP_FILE"

} || {
    log "Backup gagal"
    notify_failure "Proses backup gagal pada $(date)"
    exit 1
}

Catatan:

Cron

Perintah di cronjob:

0 2 * * * /usr/local/bin/backup-gdrive.sh

Catatan:
Script akan dijalankan setiap hari pada pukul 02:00 (menit ke 0, jam ke 2).
Biasanya pada jam segitu, traffic server lebih rendah sehingga proses backup bisa berjalan lebih cepat dan minim gangguan ke user.

┌──────── menit (0 - 59)  
│ ┌────── jam (0 - 23)  
│ │ ┌──── hari dalam bulan (1 - 31)  
│ │ │ ┌── bulan (1 - 12)  
│ │ │ │ ┌─ hari dalam minggu (0 - 7, 0 & 7 = Minggu)  
│ │ │ │ │  
│ │ │ │ │  
0 2 * * * command

Bisa diganti misalnya:

Cron tidak peduli kapan terakhir dijalankan.
Dia hanya cek:

“apakah waktu sekarang cocok dengan pola?”

Makanya:


BelajarDev merupakan bagian dari eksperimen Muhammad Ikhsan di Smartech Studios.