Salin dan Bagikan
Cara Membuat Cron Job di Linux untuk Backup Otomatis Setiap Hari - Tutorial lengkap membuat cron job di Linux untuk backup otomatis harian. Pelajari crontab syntax, …

Cara Membuat Cron Job di Linux untuk Backup Otomatis Setiap Hari

Cara Membuat Cron Job di Linux untuk Backup Otomatis Setiap Hari

Cron adalah daemon yang berjalan di background dan menjalankan task sesuai jadwal yang ditentukan. Dengan cron job, Anda dapat mengotomatisasi backup database, log rotation, maintenance, dan berbagai task penting lainnya tanpa intervensi manual.

1. Pengenalan Cron dan Crontab

Cron merupakan job scheduler bawaan Linux yang memungkinkan Anda menjalankan command atau script secara otomatis pada waktu tertentu.

Cara Kerja Cron

Cron daemon (crond) berjalan terus-menerus dan memeriksa crontab file setiap menit. Ketika waktu yang ditentukan cocok, command akan dieksekusi.

# Cek status cron service
systemctl status cron          # Debian/Ubuntu
systemctl status crond         # CentOS/RHEL

# Start cron service jika belum berjalan
sudo systemctl start cron
sudo systemctl enable cron

Struktur Crontab

Format crontab menggunakan 5 field waktu diikuti dengan command:

* * * * * command_to_execute
| | | | |
| | | | +----- Day of week (0-7, 0 dan 7 = Sunday)
| | | +------- Month (1-12)
| | +--------- Day of month (1-31)
| +----------- Hour (0-23)
+------------- Minute (0-59)

Special Characters:

  • * (asterisk): Semua nilai
  • , (comma): List nilai (contoh: 1,3,5)
  • - (dash): Range (contoh: 1-5)
  • / (slash): Step value (contoh: */10 setiap 10)

2. Membuat Cron Job untuk Backup Harian

Mari buat backup otomatis yang berjalan setiap malam.

Script Backup Sederhana

#!/bin/bash
# /home/user/scripts/backup.sh

set -euo pipefail

# Konfigurasi
BACKUP_DIR="/backup/$(date +%Y-%m)"
SOURCE_DIRS=("/var/www" "/etc/nginx" "/home/user/documents")
RETENTION_DAYS=30
LOG_FILE="/var/log/backup.log"

# Fungsi logging
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}

# Buat direktori backup
mkdir -p "$BACKUP_DIR"

# Generate nama file backup
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S).tar.gz"
BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}"

log "Memulai backup..."

# Backup dengan tar
tar -czf "$BACKUP_PATH" "${SOURCE_DIRS[@]}" 2>/dev/null

# Cek ukuran backup
BACKUP_SIZE=$(du -h "$BACKUP_PATH" | cut -f1)
log "Backup selesai: ${BACKUP_NAME} (${BACKUP_SIZE})"

# Hapus backup lama (retention policy)
find /backup -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
log "Cleanup backup lama selesai"

# Kirim notifikasi (opsional)
if command -v mail &> /dev/null; then
    echo "Backup harian selesai. Size: ${BACKUP_SIZE}" | mail -s "Backup Notification" admin@example.com
fi

exit 0

Memberikan Permission

# Jadikan script executable
chmod +x /home/user/scripts/backup.sh

# Cek script berjalan dengan baik
./backup.sh

Mengedit Crontab

# Edit crontab user
 crontab -e

# Edit crontab root (untuk system-wide tasks)
sudo crontab -e

# Lihat crontab yang aktif
crontab -l

Contoh Cron Schedule untuk Backup

# Backup setiap hari jam 2 pagi
0 2 * * * /home/user/scripts/backup.sh

# Backup setiap hari Senin jam 3 pagi
0 3 * * 1 /home/user/scripts/backup.sh

# Backup tiap 6 jam (00:00, 06:00, 12:00, 18:00)
0 */6 * * * /home/user/scripts/backup.sh

# Backup setiap hari kerja (Senin-Jumat) jam 1 pagi
0 1 * * 1-5 /home/user/scripts/backup.sh

# Backup akhir pekan (Sabtu dan Minggu) jam 10 pagi
0 10 * * 0,6 /home/user/scripts/backup.sh

3. Advanced Cron Scheduling

Predefined Schedule

Cron juga mendukung shorthand syntax:

# Setiap reboot
@reboot /home/user/scripts/startup.sh

# Setiap tahun (1 Januari jam 00:00)
@yearly /home/user/scripts/yearly-task.sh

# Setiap bulan (1st day jam 00:00)
@monthly /home/user/scripts/monthly-cleanup.sh

# Setiap minggu (Minggu jam 00:00)
@weekly /home/user/scripts/weekly-report.sh

# Setiap hari (jam 00:00)
@daily /home/user/scripts/daily-task.sh

# Setiap jam
@hourly /home/user/scripts/hourly-check.sh

Cron Job dengan Environment Variables

# Tambahkan environment di awal crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=admin@example.com
HOME=/home/user

# Database credentials
DB_USER=myuser
DB_PASS=mypassword

# Cron job
0 3 * * * /home/user/scripts/db-backup.sh

Multiple Commands dalam Satu Cron Job

# Jalankan beberapa command dengan && atau ;
0 2 * * * cd /var/www && ./backup.sh && echo "Backup sukses" | mail admin@example.com

# Atau pisah dengan % (newline dalam cron)
0 2 * * * cd /var/www/html && tar -czf backup.tar.gz . && scp backup.tar.gz backup-server:/backups/

4. Backup Database dengan Cron Job

Backup MySQL/MariaDB

#!/bin/bash
# /home/user/scripts/mysql-backup.sh

DB_USER="root"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

# Backup semua database
mysqldump -u${DB_USER} -p${DB_PASS} --all-databases > "${BACKUP_DIR}/all_databases_${DATE}.sql"

# Atau backup database spesifik
# mysqldump -u${DB_USER} -p${DB_PASS} mydatabase > "${BACKUP_DIR}/mydatabase_${DATE}.sql"

# Compress backup
gzip "${BACKUP_DIR}/all_databases_${DATE}.sql"

# Hapus backup lebih dari 7 hari
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete

Cron entry:

# Backup database setiap hari jam 3 pagi
0 3 * * * /home/user/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Backup PostgreSQL

#!/bin/bash
# /home/user/scripts/postgres-backup.sh

BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d_%H%M%S)

# Backup dengan pg_dump
pg_dump -U postgres mydatabase > "${BACKUP_DIR}/mydatabase_${DATE}.sql"

# Atau backup dengan format custom (compressed)
pg_dump -U postgres -Fc mydatabase > "${BACKUP_DIR}/mydatabase_${DATE}.dump"

# Hapus backup lama
find "$BACKUP_DIR" -name "*.sql" -mtime +14 -delete

5. Monitoring dan Logging Cron Jobs

Redirect Output ke Log File

# Simpan stdout dan stderr ke log
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>&1

# Simpan hanya error
0 2 * * * /home/user/scripts/backup.sh 2>> /var/log/backup-error.log

# Simpan output dan error ke file terpisah
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup.log 2>> /var/log/backup-error.log

# Buat log file dengan timestamp
0 2 * * * /home/user/scripts/backup.sh >> /var/log/backup-$(date +\%Y\%m\%d).log 2>&1

Menggunakan logger untuk System Log

#!/bin/bash
# Di dalam script backup

logger -t backup-script "Memulai backup harian"
# ... backup logic ...
if [ $? -eq 0 ]; then
    logger -t backup-script "Backup berhasil"
else
    logger -t backup-script "Backup gagal"
fi

Setup Notifikasi Email

# Tambahkan di crontab
MAILTO=admin@example.com

# Cron job akan mengirim email jika menghasilkan output
0 2 * * * /home/user/scripts/backup.sh

Kesimpulan

Cron job adalah tools yang sangat powerful untuk automasi task di Linux. Dengan kombinasi script bash yang baik dan scheduling yang tepat, Anda dapat mengotomatisasi backup, maintenance, monitoring, dan berbagai task penting lainnya.

Checklist Cron Job yang Baik:

  • Gunakan path lengkap untuk command dan file
  • Redirect output ke log file untuk monitoring
  • Test script secara manual sebelum add ke crontab
  • Gunakan exit code yang tepat untuk error handling
  • Implementasikan retention policy untuk backup
  • Monitor disk space secara berkala
  • Set up notifikasi untuk kegagalan

Perintah Penting:

  • crontab -e: Edit crontab
  • crontab -l: List cron jobs
  • crontab -r: Remove all cron jobs
  • sudo tail -f /var/log/syslog | grep CRON: Monitor cron execution

Artikel Terkait

Link Postingan : https://www.tirinfo.com/cara-membuat-cron-job-backup-otomatis-setiap-hari/

Hendra WIjaya
Tirinfo
5 minutes.
3 February 2026