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:*/10setiap 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 crontabcrontab -l: List cron jobscrontab -r: Remove all cron jobssudo 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/