Ana içeriğe geç
Kategoriye Dön

Oyun Sunucusu Otomatik Başlatma: systemd ve Watchdog

Oyun sunucunuzu systemd ile otomatik başlatma, watchdog script, restart policy ve tmux/screen kullanımı rehberi.

Okuma süresi: 12 dk Oyun Sunucusu Kurulumları
systemdwatchdogotomatik başlatmatmuxscreenoyun sunucusurestart
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

Giriş

Oyun sunucuları 7/24 çalışması gereken servislerdir. Sunucu çökmesi, sistem yeniden başlatması veya beklenmeyen hatalar durumunda sunucunun otomatik olarak yeniden başlaması kritik öneme sahiptir. Bu rehberde systemd service yapılandırması, watchdog scriptleri, tmux/screen kullanımı ve restart policy ayarlarını detaylı olarak anlatacağız.

systemd Service Oluşturma

Temel Service Dosyası

hljs bash
sudo nano /etc/systemd/system/gameserver.service
hljs ini
[Unit]
Description=Game Dedicated Server
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=steam
Group=steam
WorkingDirectory=/home/steam/gameserver
ExecStartPre=/home/steam/steamcmd/steamcmd.sh +force_install_dir /home/steam/gameserver +login anonymous +app_update APP_ID +quit
ExecStart=/home/steam/gameserver/start.sh
ExecStop=/bin/kill -SIGINT $MAINPID
Restart=on-failure
RestartSec=30
StartLimitIntervalSec=300
StartLimitBurst=5
TimeoutStartSec=180
TimeoutStopSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=gameserver
LimitNOFILE=100000

[Install]
WantedBy=multi-user.target

Service Yönetimi

hljs bash
# Service'i etkinleştir (boot'ta otomatik başlat)
sudo systemctl daemon-reload
sudo systemctl enable gameserver

# Service yönetimi
sudo systemctl start gameserver
sudo systemctl stop gameserver
sudo systemctl restart gameserver
sudo systemctl status gameserver

# Logları görüntüle
sudo journalctl -u gameserver -f
sudo journalctl -u gameserver --since "1 hour ago"

Restart Policy Ayarları

Restart Seçenekleri

SeçenekAçıklama
noYeniden başlatma
on-successSadece başarılı çıkışta
on-failureHata durumunda (exit code != 0)
on-abnormalSignal veya timeout durumunda
on-watchdogWatchdog timeout durumunda
on-abortSignal ile sonlandırıldığında
alwaysHer durumda yeniden başlat

Önerilen Yapılandırma

hljs ini
[Service]
Restart=always
RestartSec=15
StartLimitIntervalSec=600
StartLimitBurst=10

Bu yapılandırma:

  • Sunucu her durumda yeniden başlar
  • Yeniden başlatma arasında 15 saniye bekler
  • 600 saniye içinde en fazla 10 kez yeniden başlatır
  • Limit aşılırsa service failed durumuna geçer

Başarısız Service'i Sıfırlama

hljs bash
# Failed durumunu sıfırla
sudo systemctl reset-failed gameserver

# Tekrar başlat
sudo systemctl start gameserver

Watchdog Script

Basit Watchdog

hljs bash
nano ~/watchdog.sh
hljs bash
#!/bin/bash
SERVICE="gameserver"
LOG="/home/steam/watchdog.log"

while true; do
    if ! systemctl is-active --quiet $SERVICE; then
        echo "$(date): $SERVICE çalışmıyor, yeniden başlatılıyor..." >> $LOG
        sudo systemctl restart $SERVICE
        sleep 30
    fi
    sleep 60
done
hljs bash
chmod +x ~/watchdog.sh

Gelişmiş Watchdog (Port Kontrolü)

hljs bash
nano ~/watchdog_advanced.sh
hljs bash
#!/bin/bash
SERVICE="gameserver"
PORT=27015
LOG="/home/steam/watchdog.log"
MAX_RETRIES=3
RETRY_COUNT=0

check_port() {
    ss -tuln | grep -q ":$PORT "
    return $?
}

check_process() {
    systemctl is-active --quiet $SERVICE
    return $?
}

while true; do
    if ! check_process; then
        echo "$(date): Process çalışmıyor, yeniden başlatılıyor..." >> $LOG
        sudo systemctl restart $SERVICE
        RETRY_COUNT=$((RETRY_COUNT + 1))
        sleep 60
    elif ! check_port; then
        echo "$(date): Port $PORT yanıt vermiyor, kontrol ediliyor..." >> $LOG
        RETRY_COUNT=$((RETRY_COUNT + 1))
        if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
            echo "$(date): $MAX_RETRIES deneme başarısız, sunucu yeniden başlatılıyor..." >> $LOG
            sudo systemctl restart $SERVICE
            RETRY_COUNT=0
        fi
        sleep 30
    else
        RETRY_COUNT=0
    fi
    sleep 60
done
hljs bash
chmod +x ~/watchdog_advanced.sh

Watchdog'u systemd ile Çalıştırma

hljs bash
sudo nano /etc/systemd/system/gameserver-watchdog.service
hljs ini
[Unit]
Description=Game Server Watchdog
After=gameserver.service
Requires=gameserver.service

[Service]
Type=simple
User=steam
ExecStart=/home/steam/watchdog_advanced.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
hljs bash
sudo systemctl daemon-reload
sudo systemctl enable gameserver-watchdog
sudo systemctl start gameserver-watchdog

tmux ile Sunucu Yönetimi

tmux Kurulumu

hljs bash
sudo apt install tmux -y

tmux ile Sunucu Başlatma

hljs bash
nano ~/start_tmux.sh
hljs bash
#!/bin/bash
SESSION="gameserver"

# Mevcut session varsa kapat
tmux kill-session -t $SESSION 2>/dev/null

# Yeni session oluştur ve sunucuyu başlat
tmux new-session -d -s $SESSION
tmux send-keys -t $SESSION "cd ~/gameserver && ./start.sh" C-m

echo "Sunucu tmux session '$SESSION' içinde başlatıldı."
echo "Bağlanmak için: tmux attach -t $SESSION"
hljs bash
chmod +x ~/start_tmux.sh

tmux Temel Komutları

hljs bash
# Session'a bağlan
tmux attach -t gameserver

# Session'dan ayrıl (sunucu çalışmaya devam eder)
# Ctrl+B, ardından D

# Session listesi
tmux list-sessions

# Session'ı kapat
tmux kill-session -t gameserver

screen ile Sunucu Yönetimi

screen Kurulumu

hljs bash
sudo apt install screen -y

screen ile Sunucu Başlatma

hljs bash
nano ~/start_screen.sh
hljs bash
#!/bin/bash
SCREEN_NAME="gameserver"

# Mevcut screen varsa kapat
screen -S $SCREEN_NAME -X quit 2>/dev/null

# Yeni screen oluştur ve sunucuyu başlat
screen -dmS $SCREEN_NAME bash -c "cd ~/gameserver && ./start.sh"

echo "Sunucu screen '$SCREEN_NAME' içinde başlatıldı."
echo "Bağlanmak için: screen -r $SCREEN_NAME"
hljs bash
chmod +x ~/start_screen.sh

screen Temel Komutları

hljs bash
# Screen'e bağlan
screen -r gameserver

# Screen'den ayrıl
# Ctrl+A, ardından D

# Screen listesi
screen -ls

# Screen'i kapat
screen -S gameserver -X quit

Otomatik Güncelleme ve Yeniden Başlatma

hljs bash
nano ~/auto_update_restart.sh
hljs bash
#!/bin/bash
SERVICE="gameserver"
LOG="/home/steam/update.log"

echo "$(date): Güncelleme başlatılıyor..." >> $LOG

# Sunucuyu durdur
sudo systemctl stop $SERVICE
sleep 10

# Güncelleme
~/steamcmd/steamcmd.sh +force_install_dir ~/gameserver +login anonymous +app_update APP_ID +quit >> $LOG 2>&1

# Sunucuyu başlat
sudo systemctl start $SERVICE

echo "$(date): Güncelleme tamamlandı." >> $LOG
hljs bash
chmod +x ~/auto_update_restart.sh
crontab -e
0 4 * * * /home/steam/auto_update_restart.sh

Sonuç

systemd service yapılandırması, watchdog scriptleri ve tmux/screen kullanımı ile oyun sunucunuzun 7/24 kesintisiz çalışmasını sağlayabilirsiniz. Doğru restart policy ayarları ve otomatik güncelleme mekanizmaları ile sunucu yönetimini otomatikleştirin. REXE VDS'in güvenilir altyapısı ile sunucunuz her zaman erişilebilir olur.

Sık Sorulan Sorular

systemd service neden önemlidir?

systemd service, sunucunuzun sistem başlangıcında otomatik başlamasını ve çökme durumunda yeniden başlatılmasını sağlar.

tmux ve screen arasındaki fark nedir?

Her ikisi de terminal multiplexer'dır. tmux daha modern ve özellik zenginidir, screen ise daha eski ve yaygındır. Fonksiyonel olarak benzerlerdir.

Watchdog script ne işe yarar?

Watchdog script, sunucunun çalışıp çalışmadığını düzenli olarak kontrol eder. Sunucu durmuşsa veya port yanıt vermiyorsa otomatik olarak yeniden başlatır.

Restart policy nasıl ayarlanır?

systemd service dosyasında Restart, RestartSec, StartLimitIntervalSec ve StartLimitBurst parametreleri ile ayarlanır.

Sunucu loglarını nasıl görüntülerim?

journalctl -u gameserver -f komutu ile canlı logları, journalctl -u gameserver --since '1 hour ago' ile son 1 saatin loglarını görüntüleyebilirsiniz.

İlgili Makaleler

Ağ TrafiğiGelen GbpsGiden Gbps