Otomatik cPanel Hesap Yedekleme Betiği

Bu betik, cPanel/WHM yüklü bir sunucuda, sunucuda barındırılan tüm cPanel hesaplarının yedeklerini otomatik olarak almak için tasarlanmış bir Bash betiğidir. cPanel, web hosting hizmetlerinde yaygın olarak kullanılan bir kontrol panelidir ve bu betik, web hosting sağlayıcıları veya web sitelerini yöneten sistem yöneticileri için son derece yararlı olabilir. Özellikle büyük sayıda web sitesi yönetenler için zaman ve emek tasarrufu sağlar.

Betiğin İşlevselliği ve Kullanımı

Bu betik, sunucuda barındırılan her bir cPanel kullanıcısının yedeğini /root/backups/ dizinine cpmove formatında alır. cpmove yedek dosyaları, bir cPanel hesabına ait neredeyse tüm verileri içerir: e-postalar, web dosyaları, veritabanları, cPanel ayarları ve daha fazlası. Bu yedekleme yöntemi, özellikle bir cPanel hesabını başka bir sunucuya taşımak veya mevcut sunucuda bir hesabı geri yüklemek istediğinizde kullanışlıdır.

Betiğin Yapısı

  • Kök Kullanıcı Kontrolü: Betik, yalnızca root kullanıcısı tarafından çalıştırılabilir. Bu, cPanel hesaplarını yedeklemenin yönetici hakları gerektirmesi nedeniyledir.
  • Yedekleme Dizini Kontrolü ve Oluşturma: Betik, yedeklerin saklanacağı /root/backups/ dizininin varlığını kontrol eder; eğer bu dizin yoksa, oluşturur.
  • cPanel Kullanıcılarının Alınması: Betik, /etc/trueuserdomains dosyasından tüm cPanel kullanıcılarını alır ve bu kullanıcılar için yedekleme işlemi gerçekleştirir.
  • Yedekleme İşlemi: Her bir cPanel kullanıcısı için /usr/local/cpanel/scripts/pkgacct komutu kullanılarak yedekleme işlemi yapılır. Bu işlem sırasında oluşabilecek hatalar, kullanıcı bazında log dosyalarına kaydedilir.

Kimler İçin Faydalıdır?

  • Web Hosting Sağlayıcıları: Büyük sayıda cPanel hesabı yöneten hosting şirketleri, bu betiği müşterilerinin verilerini düzenli olarak yedeklemek için kullanabilir.
  • Sistem Yöneticileri: Birden fazla cPanel hesabını yöneten sistem yöneticileri, olası bir sistem hatası veya veri kaybı durumunda hızlı bir şekilde geri yükleme yapabilmek için bu betiği kullanabilir.
  • Web Geliştiricileri: Kendi sunucularında birden fazla proje geliştiren ve bu projeleri düzenli olarak yedeklemek isteyen geliştiriciler için de yararlıdır.

Potansiyel Sorunlar ve Çözümleri

  • Yazma İzinleri: Eğer betik, yedekleme dizinine yazma izni olmadan çalıştırılırsa, yedekleme işlemi başarısız olabilir. Bu durumda, dizinin yazma izinlerini kontrol edin.
  • Disk Alanı: Yeterli disk alanının olmaması, yedekleme işleminin başarısız olmasına neden olabilir. Disk kullanımını düzenli olarak kontrol edin ve gereksiz dosyaları temizleyin.
  • cPanel Kullanıcı Adı Sorunları: /etc/trueuserdomains dosyasından alınan kullanıcı adlarının doğruluğunu kontrol edin. Yanlış veya geçersiz kullanıcı adları işlemi durdurabilir.

Bu betik, cPanel/WHM kullanılarak yönetilen sunucularda veri güvenliğini sağlamak ve olası veri kayıplarına karşı önlem al

#!/bin/bash

echo "cPanel Yedekleme İşlemi Başlıyor..."

# Kök kullanıcı olarak çalıştırılıp çalıştırılmadığını kontrol et
if [ "$(id -u)" != "0" ]; then
   echo "Hata: Bu betik yalnızca root kullanıcısı olarak çalıştırılabilir."
   exit 1
else
   echo "Kök kullanıcı olarak çalıştırıldı, işlem devam ediyor..."
fi

echo "-----------------------------------------------------"

# Yedeklerin saklanacağı dizin
BACKUP_DIR="/root/backups/"

echo "Yedekleme dizini kontrol ediliyor: $BACKUP_DIR"

# BACKUP_DIR dizini yoksa, oluştur
if [ ! -d "$BACKUP_DIR" ]; then
    mkdir -p $BACKUP_DIR
    echo "Yedekleme dizini oluşturuldu."
else
    echo "Yedekleme dizini zaten mevcut."
fi

echo "-----------------------------------------------------"

# Mevcut kullanıcı listesini al (kullanıcı başına bir satır)
echo "cPanel kullanıcıları alınıyor..."
cpanel_users=$(cut -d: -f2 /etc/trueuserdomains | sort | uniq)

# Kullanıcı listesini kontrol et
if [ -z "$cpanel_users" ]; then
    echo "Hata: cPanel kullanıcıları bulunamadı."
    exit 1
fi

# Her kullanıcı için yedekleme işlemi
for user in $cpanel_users; do
    echo "Yedekleme başlıyor: $user"
    /usr/local/cpanel/scripts/pkgacct $user $BACKUP_DIR &> $BACKUP_DIR/"$user"_backup.log
    if [ $? -eq 0 ]; then
        echo "$user için yedekleme başarılı."
    else
        echo "Hata: $user yedeklenirken bir hata oluştu. Detaylar için $BACKUP_DIR/${user}_backup.log dosyasına bakın."
    fi
    echo "-----------------------------------------------------"
done

echo "Tüm cPanel hesaplarının yedekleri başarıyla alındı. Yedekler $BACKUP_DIR dizininde."