Skip to content

Instantly share code, notes, and snippets.

@sinansh
Created December 29, 2025 09:57
Show Gist options
  • Select an option

  • Save sinansh/b8a36315242b70b0f02c986a2b8af394 to your computer and use it in GitHub Desktop.

Select an option

Save sinansh/b8a36315242b70b0f02c986a2b8af394 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
BASE="/qradar_backups"
LOGDIR="/var/log/qradar"
LOGFILE="$LOGDIR/qradar_backup_$(date +%F).log"
MAIL_FROM="from@domain.tld"
MAIL_TO="to@domain.tld"
STABLE_MINUTES=60 # Son 60 dk değişmemiş dosyalar taşınır
STALE_ROOT_MINUTES=2880 # 48 saat = 2880 dk; kökte bu süreden eski dosya varsa ALARM
mkdir -p "$LOGDIR"
echo "=== $(date) | QRadar yedek taşıma başladı ===" >> "$LOGFILE"
moved_count=0
skipped_active=0
skipped_nomatch=0
errors=0
# Kök dizindeki dosyaları tara (hepsi taşınsın diye tarih filtresi yok)
find "$BASE" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' f; do
bn="$(basename "$f")"
# Aktif (hala değişen) dosyaları atla
if find "$f" -maxdepth 0 -type f -mmin -"$STABLE_MINUTES" >/dev/null 2>&1; then
echo "$(date) | ATLANDI (aktif/değişiyor): $bn" >> "$LOGFILE"
((skipped_active++))
continue
fi
# Dosya adından _MM_YYYY yakala (örnek: ..._12_2025...)
if [[ "$bn" =~ _([0-9]{1,2})_([0-9]{4}) ]]; then
month="$(printf "%02d" "${BASH_REMATCH[1]}")"
year="${BASH_REMATCH[2]}"
# Ay doğrulama
if ! [[ "$month" =~ ^(0[1-9]|1[0-2])$ ]]; then
echo "$(date) | HATALI AY: $bn" >> "$LOGFILE"
((errors++))
continue
fi
dest="$BASE/$year/$month"
mkdir -p "$dest"
# -n: aynı isim varsa üzerine yazma
if mv -n -- "$f" "$dest/"; then
echo "$(date) | TAŞINDI: $bn -> $dest" >> "$LOGFILE"
((moved_count++))
else
echo "$(date) | HATA (taşınamadı): $bn" >> "$LOGFILE"
((errors++))
fi
else
echo "$(date) | TARİH BULUNAMADI: $bn" >> "$LOGFILE"
((skipped_nomatch++))
fi
done
echo "=== $(date) | Özet: taşınan=$moved_count aktif_atlanan=$skipped_active tarih_yok=$skipped_nomatch hata=$errors ===" >> "$LOGFILE"
# ---------------- KÖK DİZİN YAŞLANMA ALARMI (48 saat) ----------------
OLD_FILES="$(find "$BASE" -maxdepth 1 -type f -mmin +"$STALE_ROOT_MINUTES" -printf "%f\n" 2>/dev/null || true)"
if [[ -n "$OLD_FILES" ]]; then
echo "=== $(date) | ALARM: Kök dizinde 48 saatten eski dosya(lar) ===" >> "$LOGFILE"
echo "$OLD_FILES" >> "$LOGFILE"
mail -r "$MAIL_FROM" -s "ALARM: QRadar Kök Dizininde 48 Saatten Eski Dosya Var" "$MAIL_TO" <<EOF
Merhaba,
/qradar_backups kök dizininde 48 saatten uzun süredir duran dosya(lar) tespit edilmiştir.
Bu durum aşağıdaki olasılıklara işaret edebilir:
- Dosya adı beklenen formata uymuyor (tarih yakalanamıyor)
- Taşıma script’i cron ile çalışmamış veya hata almış olabilir
- NFS kopyalama süreci yarım kalmış ve ilerlemiyor olabilir
Tespit edilen dosyalar:
$OLD_FILES
İşlem tarihi : $(date)
Log dosyası : $LOGFILE
Lütfen kontrol edilmesini rica ederiz.
İyi çalışmalar.
EOF
fi
# ---------------- DURUMA GÖRE MAİL ----------------
# ❌ UYARI: hata varsa veya aktif dosya atlandıysa (operasyonel dikkat)
if (( errors > 0 || skipped_active > 0 )); then
mail -r "$MAIL_FROM" -s "UYARI: QRadar Yedek Taşıma Sorunu" "$MAIL_TO" <<EOF
Merhaba,
QRadar yedek taşıma işlemi sırasında dikkat edilmesi gereken durumlar oluşmuştur.
Özet:
- Taşınan dosya sayısı : $moved_count
- Aktif olduğu için atlanan dosya : $skipped_active
- Tarih bilgisi bulunamayan dosya : $skipped_nomatch
- Hata sayısı : $errors
Not: Aktif olduğu için atlanan dosyalar, bir sonraki çalışmada otomatik olarak tekrar denenecektir.
İşlem tarihi : $(date)
Log dosyası : $LOGFILE
Bilgilerinize sunarız.
İyi çalışmalar.
EOF
fi
# ✅ BAŞARILI: en az 1 dosya taşındı ve hiç hata yok ve aktif atlama yok
if (( moved_count > 0 && errors == 0 && skipped_active == 0 )); then
mail -r "$MAIL_FROM" -s "QRadar Yedek Taşıma Başarılı" "$MAIL_TO" <<EOF
Merhaba,
QRadar yedek taşıma işlemi başarıyla tamamlanmıştır.
Taşınan dosya sayısı : $moved_count
İşlem tarihi : $(date)
Log dosyası : $LOGFILE
Bilgilerinize sunarız.
İyi çalışmalar.
EOF
fi
@sinansh
Copy link
Author

sinansh commented Dec 29, 2025

Kurulum komutları

sudo chmod +x /usr/local/bin/qradar_sort_backups.sh
sudo mkdir -p /var/log/qradar

Test:

sudo /usr/local/bin/qradar_sort_backups.sh
tail -n 100 /var/log/qradar/qradar_backup_$(date +%F).log

Cron

sudo crontab -e

0 6 * * * /usr/local/bin/qradar_sort_backups.sh

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment