Sırada OpenLiteSpeed teknolojisini ücretsiz olarak önümüze seren, cPanel’in en güçlü açık kaynaklı alternatiflerinden biri olan...
Linux Sunucularda Otomatik Yedekleme (Cron Job) Rehberi
Linux'ta otomatik yedekleme sistemi kurmak iki temel aşamadan oluşur: Bash Script Oluşturmak: Sunucudaki dosyaları (tar ile) ve veritabanlarını (mysqldump ile) tek potada eritip tarihli bir .tar.gz paketine dönüştüren bir senaryo kodu yazılır. Cron Job ile Zamanlamak: Linux'un zamanlayıcı paneli olan crontab -e komutu açılarak, bu hazırlanan scriptin her gece (Örn: saat 03:00'te) otomatik çalışması için tek satırlık bir zaman emri girilir.
Sistem yönetiminin en kutsal, en taviz verilmez kuralına geldik şef: Yedekleme. Bu dünyada iki tür sunucu yöneticisi vardır; yedek alanlar ve henüz her şeyini kaybetmediği için yedek alması gerektiğini bilmeyenler.
Gece yarısı diskin çökmesi, yanlışlıkla çalıştırılan bir rm -rf komutu veya sinsi bir siber saldırı… Tüm emeklerin tek bir saniyede buharlaşmasını engelleyen tek şey, arkada sessiz sedasız çalışan bir otomatik yedekleme mekanizmasıdır. Bugün Linux’un o sadık ve dakik zaman saatini, yani Cron Job (Zamanlanmış Görevler) altyapısını bir yedekleme canavarına dönüştüreceğiz.
Kolları sıva, sunucuyu kendi kendini koruyan bir siber kaleye çeviriyoruz!
Linux Sunucularda Otomatik Yedekleme (Cron Job) Nasıl Ayarlanır?
Yazılım geliştirirken ya da bir web sitesi yönetirken her şeyi kusursuz yaptığını düşünebilirsin. Kodların optimize, güvenlik duvarın (firewall) aktif, sunucun tıkır tıkır çalışıyor olabilir. Ancak sunucu dünyasında Murphy Kanunları her zaman tetiktedir: “Kötü bir şey olma ihtimali varsa, mutlaka olur.” Donanım arızaları veya insan hataları ansızın kapını çaldığında, elinde güncel bir yedek yoksa dijital dünyada kelimenin tam anlamıyla “yaya” kalırsın.
Yedek almayı her gün manuel olarak hatırlamak, yoğun iş temposunda imkansıza yakındır. Neyse ki Linux çekirdeğinin içinde, bizim yerimize zamanı milisaniyelik hassasiyetle takip eden, hiç uyumayan bir asistanımız var: Cron.
Bu rehberde, Linux sunucunda hem web dosyalarını hem de MySQL veritabanlarını otomatik olarak paketleyen, bunları tarih damgasıyla arşivleyen ve bu süreci Cron Job ile tam otomatik bir döngüye oturtan profesyonel bir sistem kuracağız. Terminalini aç, arkanı yaslan; sunucunun sigortasını yapıyoruz.
1. Aşama: Crontab Mantığını Anlamak (Zaman Şifreleri)
Linux’ta zamanlanmış görevleri yönettiğimiz mekanizmaya Crontab denir. Terminale crontab -e yazdığında karşına çıkan ekran, sunucunun ajandasıdır. Buraya yazacağın her komutun başında 5 adet yıldız (* * * * *) işareti bulunur. Bu yıldızlar, görevin tam olarak ne zaman çalışacağını belirleyen gizli birer koddur:
* * * * * çalıştırılacak_komut
│ │ │ │ │
│ │ │ │ └─── Haftanın Günü (0 - 6) (Pazar=0 veya 7)
│ │ │ ──────── Ay (1 - 12)
│ │ │ ──────── Ayın Günü (1 - 31)
│ │ ──────────── Saat (0 - 23)
└─────────────────── Dakika (0 - 59)- Örnekler:
0 3 * * *-> Her gece tam saat 03:00’te çalışır. (Yedekleme için en ideal zaman dilimidir, trafik en düşüktür).0 0 * * 1-> Her Pazartesi gece yarısı saat 00:00’da çalışır.*/15 * * * *-> Her 15 dakikada bir sürekli çalışır.
2. Aşama: Akıllı Yedekleme Scripti (Bash) Yazma
Doğrudan crontab içine karmaşık kodlar yazmak yerine, temiz ve profesyonel yöntem olan bir Bash script oluşturacağız. Bu script hem dosyalarını sıkıştıracak hem de SQL yedeğini alacak.
- Sunucunda güvenli bir dizinde (Örn:
/rootaltında)yedekle.shadında boş bir dosya oluştur:
nano /root/yedekle.shİçine şu efsanevi, optimize edilmiş script kodlarını aynen yapıştır (kendine göre düzenle):
#!/bin/bash
# ---- AYARLAR ----
YEDEK_DIZIN="/backup" # Yedeklerin saklanacağı klasör
SITE_DIZIN="/var/www/vhosts/siteniz.com" # Yedeklenecek web dosyaları
TARIK=$(date +%F-%H%M) # Dosya adına eklenecek tarih formatı
DB_USER="veritabanı_kullanici_adiniz"
DB_PASS="veritabanı_şifreniz"
DB_NAME="veritabanı_adınız"
# -----------------
# Yedek klasörü yoksa otomatik oluştur
mkdir -p $YEDEK_DIZIN
# 1. Adım: MySQL Veritabanını Dump Et (Dışarı Aktar)
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $YEDEK_DIZIN/db-$DB_NAME-$TARIK.sql
# 2. Adım: Web Dosyalarını ve SQL Yedeğini Tek Bir Paket Haline Getirip Sıkıştır
tar -czf $YEDEK_DIZIN/yedek-$TARIK.tar.gz -C $SITE_DIZIN . $YEDEK_DIZIN/db-$DB_NAME-$TARIK.sql
# 3. Adım: Geçici Oluşturulan Ham SQL Dosyasını Sil (Çöp Bırakma)
rm -f $YEDEK_DIZIN/db-$DB_NAME-$TARIK.sql
# 4. Adım: Sunucuyu Korumak İçin 7 Günden Eski Yedekleri Otomatik Temizle
find $YEDEK_DIZIN -type f -name "yedek-*.tar.gz" -mtime +7 -exec rm -f {} \;
echo "Yedekleme Başarıyla Tamamlandı: $TARIK"Merak etme yanlış bir yazım yok TARIH değil TARIK diye yazdık :))
Dosyayı kaydedip çık (CTRL + O, Enter, CTRL + X).
Çok Kritik Adım: Yazdığın bu scriptin sunucu tarafından çalıştırılabilir olması için dosya izinlerini (iznini) yükseltmelisin:
chmod +x /root/yedekle.shArtık /root/yedekle.sh komutunu terminalde elinle çalıştırdığında, /backup klasörünün altında tarih damgalı nur topu gibi bir .tar.gz yedeğin oluşacaktır.
3. Aşama: Sistem Otomasyonu (Cron Job Bağlantısı)
Şimdi yazdığımız bu canavar scripti otomatik bir döngüye bağlama zamanı.
- Terminale şu komutu yazarak zamanlayıcı panelini aç:
crontab -eAçılan dosyanın en alt satırına in ve şu zaman emrini yapıştır:
0 3 * * * /root/yedekle.sh > /dev/null 2>&1- Bu komut sunucuya şu emri verir: “Her gece saat tam 03:00 olduğunda, git
/root/yedekle.shdosyasını çalıştır. Arka planda gereksiz log çıktısı veya bildirim üretme (> /dev/null 2>&1).” - Dosyayı kaydedip kapat. Terminalde
crontab: installing new crontabyazısını gördüysen, işlem başarıyla sisteme kazınmıştır!
[Image representing automated daily cron job calendar ticking at midnight backup icon glowing green]
Cron Job Görevlerini Nasıl Listeler ve Kontrol Edersin?
Sistemde aktif olarak çalışan hangi zamanlanmış görevlerin olduğunu görmek için şu komutu kullanabilirsin:
crontab -lEğer gelecekte bu otomatik yedekleme sistemini tamamen durdurmak istersen, yine crontab -e ile panele girip eklediğin o satırı silmen veya başına # (yorum) işareti koyman yeterlidir.
💡 Teknik İpucu (Expert Box)
Bunu biliyor muydunuz? Yedeklerinizi sitenizin barındığı sunucuyla aynı fiziksel diskte tutmak aslında tam bir yanılsamadır, yani sahte bir güvenlik hissidir. Eğer sunucunuzun diski fiziksel olarak yanarsa veya hosting firmanız iflas ederse, o
/backupklasöründeki yedekleriniz de ana dosyalarınızla birlikte küle döner. Altın standart: Uzak Yedeklemedir (Offsite Backup). Hazırladığınız yedekleme scriptinin en sonunascpveyarsynckomut satırları ekleyerek, oluşturulan o.tar.gzpaketini anında başka bir yedekleme sunucusuna veya Amazon S3, Google Drive gibi bulut depolama havuzlarına fırlatmalısınız!
Sonuç: Artık Kafanız Rahat, Sunucunuz Güvende
Tebrikler şef! Artık sunucun her gece sen yatağında uyurken senin yerine çalışacak, sitenin tüm verilerini tek bir hafif paket haline getirip arşivleyecek ve disk dolmasın diye 7 günden eski yedekleri otomatik olarak imha edecek. Otomasyonun gücünü arkana aldığında, siber kriz anlarında soğukkanlılığını korur ve sadece tek bir komutla siteni dakikalar içinde en güncel haline geri döndürebilirsin.
Sen otomatik yedekleme sistemini kurarken Bash script testinde bir hata aldın mı? Yedeklerini uzak bir sunucuya (S3/FTP) taşımak istiyor musun? Yorumlara yaz, sunucu otomasyon zincirini birlikte mükemmelleştirelim!