Automation dan Crontab
Otomatisasi tugas dengan cron dan script scheduling
Cron
Daemon scheduler di Unix. Format:
* * * * * command
- - - - -
| | | | |
| | | | +----- Day of week (0-7)
| | | +------- Month (1-12)
| | +--------- Day of month (1-31)
| +----------- Hour (0-23)
+------------- Minute (0-59)Spesial String
@yearly/@monthly/@weekly/@daily/@hourly/@reboot
Contoh Entry
0 3 * * * /path/to/backup.sh # Setiap jam 3 pagi
*/5 * * * * /path/to/monitor.sh # Setiap 5 menit
0 9 * * 1 /path/to/report.sh # Setiap Senin jam 9 pagiMengelola Crontab
crontab -e # Edit
crontab -l # List
crontab -r # Hapus semuaEnvironment
Cron berjalan dengan environment minimal. Gunakan path absolut atau set PATH di awal crontab.
Script Backup Otomatis
#!/bin/bash
set -euo pipefail
readonly BACKUP_DIR="/backup"
readonly SOURCE_DIR="/var/www/html"
readonly DATE=$(date +%Y%m%d_%H%M%S)
readonly BACKUP_FILE="backup_${DATE}.tar.gz"
readonly RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"
find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "[$(date)] Backup selesai: ${BACKUP_FILE}" >> /var/log/backup.logLock File (Anti Overlap)
#!/bin/bash
LOCKFILE="/var/run/myscript.lock"
if [ -f "$LOCKFILE" ] && kill -0 "$(cat "$LOCKFILE")" 2>/dev/null; then
echo "Script sedang berjalan"
exit 1
fi
echo $$ > "$LOCKFILE"
trap 'rm -f "$LOCKFILE"' EXIT
# Script utama...Systemd Timer
# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targetsudo systemctl enable backup.timer
sudo systemctl start backup.timer
systemctl list-timersAt (One-time)
echo "/path/to/script.sh" | at 3:00 AM tomorrow
atq # List job
atrm 1 # Hapus jobBest Practice
- Gunakan path absolut
- Redirect output ke log:
>> /var/log/job.log 2>&1 - Set environment variable di crontab
- Gunakan lock file untuk script lama
- Kirim email jika job gagal (MAILTO)
- Log exit code untuk debugging