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

İçindekiler

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.