Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bu rehberde bir oyun sunucusu için otomatik yedekleme ve otomatik yeniden başlatma düzeni kuracaksınız: yedek betiği, systemd timer ile zamanlama, eski yedeklerin temizlenmesi ve çökme sonrası yeniden başlatma. Sunucusu olan yönetici ve topluluk sahiplerine yöneliktir. Tahmini süre 30 dakikadır.
Yedek almak yalnızca dosya kopyalamak değildir: tutarlı bir yedek, geri yükleme denemesiyle doğrulanır. Rehberde örnek olarak /opt/oyun/sunucu dizini ve oyun adlı bir systemd servisi kullanılmıştır; kendi yollarınıza göre uyarlayın.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky; systemd kullanan bir sistem
- sudo yetkisi
- Yedeklerin tutulacağı yeterli disk alanı (
df -hile kontrol edin) ve mümkünse ayrı bir disk ya da uzak depolama - Oyun sunucunuzun bir systemd servisi olarak çalışıyor olması (önceki rehberdeki gibi)
- Silme komutları içeren betik kullanacağınız için önce bir test dizininde deneyin
Adım adım yedekleme ve otomatik yeniden başlatma
1. Yedek dizinini hazırlayın
Yedekler için ayrı bir dizin oluşturup erişimi kısıtlayın.
sudo mkdir -p /var/backups/oyun
sudo chown oyun:oyun /var/backups/oyun
sudo chmod 750 /var/backups/oyunMümkünse bu dizini sunucuyla aynı diskte tutmayın; disk arızası hem veriyi hem yedeği kaybettirir.
2. Yedek betiğini yazın
Betik, dünya klasörünü tarih damgalı bir arşive sıkıştırır. Oyununuzda dosya yazımı sırasında alınan yedek bozuk olabilir; bu yüzden mümkünse yazmayı durduran bir komut kullanın. Minecraft örneğinde save-off, save-all, save-on komutları RCON üzerinden gönderilebilir. Oyununuz böyle bir yöntem sunmuyorsa yedeği sunucu durmuşken alın.
#!/bin/bash
# /opt/oyun/yedekle.sh
set -euo pipefail
KAYNAK=/opt/oyun/sunucu/world
HEDEF=/var/backups/oyun
TARIH=$(date +%Y%m%d-%H%M%S)
tar -czf "$HEDEF/world-$TARIH.tar.gz" -C "$(dirname "$KAYNAK")" "$(basename "$KAYNAK")"
find "$HEDEF" -name 'world-*.tar.gz' -mtime +7 -deleteBetikteki find ... -delete satırı 7 günden eski yedekleri siler. Uyarı: HEDEF değişkeninin doğru olduğundan emin olmadan çalıştırmayın; önce -delete yerine -print yazarak neyin silineceğini görün.
sudo chmod 750 /opt/oyun/yedekle.sh
sudo chown oyun:oyun /opt/oyun/yedekle.sh3. Betiği elle deneyin
sudo -u oyun /opt/oyun/yedekle.sh
ls -lh /var/backups/oyunArşivin oluştuğunu ve içeriğini tar -tzf dosya.tar.gz | head ile listeleyerek doğrulayın.
4. systemd servis ve timer ile zamanlayın
cron yerine systemd timer, günlükleme ve hata takibi açısından daha rahattır. Önce servis:
# /etc/systemd/system/oyun-yedek.service
[Unit]
Description=Oyun sunucusu yedegi
[Service]
Type=oneshot
User=oyun
ExecStart=/opt/oyun/yedekle.shSonra timer (her gün 04:30):
# /etc/systemd/system/oyun-yedek.timer
[Unit]
Description=Oyun sunucusu gunluk yedek
[Timer]
OnCalendar=*-*-* 04:30:00
Persistent=true
[Install]
WantedBy=timers.targetsudo systemctl daemon-reload
sudo systemctl enable --now oyun-yedek.timer
systemctl list-timers --all | grep oyun5. Çökme sonrası otomatik yeniden başlatma
Oyun servisinizin [Service] bölümünde şu iki satır bulunmalıdır:
Restart=on-failure
RestartSec=10Ardından sudo systemctl daemon-reload yapın. Çok hızlı döngüye giren bir servisi sınırlamak için [Unit] bölümüne StartLimitIntervalSec=300 ve StartLimitBurst=5 ekleyebilirsiniz.
6. Planlı günlük yeniden başlatma (isteğe bağlı)
Bellek sızıntısı yaşayan oyunlarda gece yeniden başlatmak işe yarar. Yedekten sonra bir yeniden başlatma timer'ı ekleyin:
# /etc/systemd/system/oyun-yeniden-baslat.service
[Unit]
Description=Oyun sunucusu planli yeniden baslatma
[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart oyun# /etc/systemd/system/oyun-yeniden-baslat.timer
[Unit]
Description=Oyun sunucusu gece yeniden baslatma
[Timer]
OnCalendar=*-*-* 05:00:00
[Install]
WantedBy=timers.targetsudo systemctl daemon-reload
sudo systemctl enable --now oyun-yeniden-baslat.timerOyunculara yeniden başlatma saatini önceden duyurun.
7. Yedeği başka bir yere kopyalayın
Yedekleri başka bir makineye göndermek için rsync kullanabilirsiniz. Bu komut uzak sunucuya anahtarla erişim hazırsa çalışır:
rsync -a /var/backups/oyun/ yedekkullanici@yedek-sunucu:/yedekler/oyun/Uzak sunucu adını ve kullanıcıyı kendinize göre değiştirin.
Doğrulama
systemctl list-timers --all | grep oyun
sudo journalctl -u oyun-yedek.service -n 20 --no-pager
ls -lh /var/backups/oyunBeklenen sonuç: timer'ın bir sonraki çalışma zamanının görünmesi, günlükte hata olmaması ve yedek dizininde tarih damgalı arşivlerin birikmesi. Düzenli olarak bir yedeği test dizinine açarak (tar -xzf) geri yüklenebilirliğini doğrulayın.
Sık karşılaşılan sorunlar
- Yedek dosyası sıfır bayt: disk dolu olabilir;
df -hile bakın. - Timer çalışmıyor:
enable --nowkomutunun.timerbirimi için yapıldığından emin olun. - Yedek bozuk çıkıyor: oyun dosya yazarken alınmıştır; yazmayı durduran komutlarla veya sunucu durmuşken yedekleyin.
- İzin hatası: betik ve hedef dizin
oyunkullanıcısına ait olmalıdır. - Disk hızla doluyor: saklama süresini kısaltın ya da yedeği uzak depolamaya taşıyın.
Güvenlik ve bakım notları
- Yedekler de hassas veri içerir; erişim izinlerini kısıtlayın ve uzak kopyaları şifreli kanaldan taşıyın.
- 3-2-1 kuralını hedefleyin: en az üç kopya, iki farklı ortam, bir tanesi sunucudan uzak.
- Geri yükleme testini periyodik olarak yapın; test edilmemiş yedek garanti değildir.
- Silme komutlu betikleri değiştirirken önce
-printile deneyin. - Yedek betiğinin başarısız olması durumunda bildirim almak için e-posta veya izleme aracı bağlamayı değerlendirin.
- Fidye yazılımına karşı en az bir kopyayı sunucudan yazılamayan bir yerde tutun.
Sık sorulan sorular
Oyun sunucusu çalışırken yedek almak güvenli mi?
Dosyalar yazılırken alınan kopya tutarsız olabilir. Oyununuzun kaydı geçici durdurma komutlarını varsa kullanın; yoksa yedeği sunucu durmuşken alın.
Ne sıklıkla yedek almalıyım?
Veri kaybını ne kadar tolere edebileceğinize bağlıdır. Aktif sunucular için günlük yedek yaygındır; çok hareketli sunucularda daha sık yedek almayı değerlendirin.
cron mu systemd timer mı kullanmalıyım?
İkisi de işi görür. systemd timer günlükleri ve hata durumunu merkezi tutmanızı sağlar, bu yüzden systemd kullanan sistemlerde tercih edilir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Oyun sunucusunda DDoS saldırısı sırasında olay yönetimi: ilk 30 dakikaOyun sunucusunda DDoS saldırısı sırasında ilk 30 dakikada tespit, sağlayıcı iletişimi, hafifletme, kayıt toplama ve oyuncu bilgilendirmesini düzenli bir olay planıyla yönetin.
- Pterodactyl oyun sunucusu paneli güvenliğiPterodactyl oyun sunucusu panelini genel ilkelerle güvenli hale getirin: HTTPS, iki adımlı doğrulama, Wings port kısıtlaması, yedekleme, güncelleme ve yetki ayrımı.
- Oyun sunucusunda gecikme ve performans izlemeOyun sunucusunda CPU, bellek, ağ ve paket kaybını Linux araçlarıyla izleyin; tick veya FPS düşüşlerini ve gecikme artışlarını sistem metrikleriyle ilişkilendirmeyi öğrenin.
- SteamCMD ile Linux’ta oyun sunucusu kurulumuSteamCMD ile Linux üzerinde ayrıcalıksız bir kullanıcıyla oyun sunucusu kurun; güncellemeyi otomatikleştirin, systemd servisi tanımlayın ve yalnızca gereken portları açın.