Lewati ke konten
Kembali ke Blog

Cara Membuat Cron Job di Linux untuk Backup Otomatis Setiap Hari

· · 6 menit baca

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" [email protected] 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
[email protected]
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 [email protected]

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
[email protected]

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

Ditulis oleh

Hendra Wijaya

Tinggalkan Komentar

Email tidak akan ditampilkan.