screen ve tmux ile Minecraft sunucusunu arka planda çalıştırmak, Linux üzerinde sunucu işleten herkesin öğrenmesi gereken ilk numaradır: java -jar paper.jar komutunu doğrudan SSH terminalinde çalıştırırsanız bağlantı koptuğu an sunucu da kapanır. Çözüm, sunucuyu SSH oturumundan bağımsız bir terminal çoklayıcısı içinde başlatmaktır. Bu sayfada screen ve tmux kurulumunu, oturum açma ve konsola geri dönme komutlarını, oturuma girmeden konsola komut göndermeyi, güvenli kapatma betiğini ve bu araçlarla systemd arasındaki farkı bulacaksınız.
Tüm komutlar Ubuntu 24.04 LTS üzerinde denenmiştir; Debian 12 ile AlmaLinux/Rocky Linux’ta yalnızca paket yöneticisi komutu değişir. Sunucu dosyalarının /opt/minecraft/server altında ve minecraft adlı ayrı bir kullanıcıya ait olduğu varsayılmıştır.
SSH Kapanınca Sunucu Neden Duruyor?#
SSH oturumunu kapattığınızda çekirdek, o oturumun kontrol terminaline bağlı bütün süreçlere SIGHUP (hangup) sinyali gönderir. Java süreci bu sinyali yakalamaz ve sonlanır. İnternetiniz koptuğunda, dizüstünüz uykuya geçtiğinde veya yanlışlıkla terminal penceresini kapattığınızda da aynı şey olur.
Bunu aşmanın üç yolu vardır ve ikisi eksiktir:
nohup java -jar paper.jar &— süreç ayakta kalır ama konsola komut yazamazsınız.op,whitelist add,stopgibi komutlar için tek yolunuz RCON olur. Acil durumda sunucuyu düzgün kapatamazsınız.- screen / tmux — süreç ayakta kalır ve istediğiniz an konsola geri dönüp komut yazabilirsiniz. Günlük yönetim için doğru araç.
- systemd servisi — süreç ayakta kalır, makine yeniden başlayınca kendi kendine açılır, çökerse yeniden başlatılır. Üretim sunucusu için doğru araç.
screen mi tmux mu? Hızlı Karşılaştırma#
| Özellik | screen | tmux |
|---|---|---|
| Öğrenme süresi | Çok kısa, 4-5 komut | Orta, kavram sayısı fazla |
| Ön ek tuşu | Ctrl+A | Ctrl+B (değiştirilebilir) |
| Ekran bölme | Sınırlı, kullanışsız | Yatay ve dikey, çok rahat |
| Yapılandırma dosyası | ~/.screenrc | ~/.tmux.conf, çok daha esnek |
| Aktif geliştirme | Yavaş | Aktif |
| Birden çok sunucu yönetimi | Oturum başına bir sunucu | Tek oturumda pencere/pane |
| Varsayılan kaydırma tamponu | 100 satır (az) | 2000 satır |
| Tek Minecraft sunucusu için | Yeterli | Yeterli |
Kısa cevap: tek sunucu işletiyorsanız screen yeterli. Bir proxy arkasında birden fazla alt sunucu, konsol ve tail -f penceresini aynı anda görmek istiyorsanız tmux tercih edin. BungeeCord veya Velocity ile sunucu ağı kuranlar için tmux belirgin biçimde daha rahat.
screen ve tmux için indirme gerekmez, dağıtımın kendi deposunda bulunur. Bağlantılar resmî kaynaklara gider.
screen Kurulumu ve Minecraft Oturumu Açma#
screen çoğu dağıtımda önyüklü gelmez. Kurulum tek satırdır:
# Ubuntu / Debian
sudo apt update && sudo apt install -y screen
# AlmaLinux / Rocky Linux
sudo dnf install -y screen
screen --version
# Screen version 4.09.01 (GNU) ...
Kurulumdan sonra izleyeceğiniz akış şudur:
-
Sunucu kullanıcısına geçin#
Minecraft sunucusunu kök kullanıcıyla çalıştırmayın. Oturumu, sunucu dosyalarının sahibi olan kullanıcıyla açın ki dosya izinleri karışmasın.
sudo -u minecraft -s cd /opt/minecraft/server -
Başlatma betiğini hazırlayın#
8 GB’lık bir paket için heap değerleri
-Xms6G -Xmx6Golmalıdır; işletim sistemine pay bırakmayı unutmayın.#!/bin/bash # /opt/minecraft/server/start.sh cd /opt/minecraft/server exec java -Xms6G -Xmx6G -XX:+UseG1GC -XX:+ParallelRefProcEnabled \ -XX:MaxGCPauseMillis=200 -XX:+AlwaysPreTouch \ -jar paper.jar noguichmod +x /opt/minecraft/server/start.sh -
Adlandırılmış bir screen oturumu açın#
-Sparametresi oturuma isim verir. İsimlendirmeden açılan oturumlar18422.pts-0.vds1gibi anlaşılmaz kimliklerle listelenir; her zaman isim verin.screen -S mc -
Sunucuyu oturumun içinde başlatın#
Artık normal bir terminaldesiniz, farkı yok. Sunucu logları akmaya başlayacak.
./start.sh -
Oturumdan ayrılın (detach)#
Ctrl+A tuşlarına basıp bırakın, ardından D tuşuna basın. Ekranda
[detached from 18422.mc]yazısını görürsünüz. Sunucu arka planda çalışmaya devam eder; SSH’tan çıkabilirsiniz.screen -ls # There is a screen on: # 18422.mc (Detached)
exit yazmayın. Ctrl+C Java sürecini durdurur, exit ise oturumu tamamen kapatır. İkisi de sunucuyu kapatır ve son kaydedilmemiş dünya değişiklikleri kaybolabilir. Doğru çıkış yolu yalnızca Ctrl+A ardından D’dir.Sunucuyu Tek Komutla Arka Planda Başlatmak#
Her seferinde oturuma girip betiği elle çalıştırmak yerine, oturumu doğrudan ayrılmış (detached) halde açabilirsiniz. -d -m ikilisi tam olarak bunu yapar:
screen -dmS mc /opt/minecraft/server/start.sh
# Calisiyor mu kontrol edin
screen -ls
ps aux | grep [p]aper.jar
screen Kısayolları ve Komut Tablosu#
screen’de tüm kısayollar Ctrl+A ön ekiyle başlar: önce Ctrl+A’ya basıp bırakırsınız, sonra ikinci tuşa. Günlük kullanımda ihtiyacınız olan her şey bu tabloda:
| Komut / kısayol | Ne yapar |
|---|---|
screen -S mc | “mc” adında yeni oturum açar |
screen -dmS mc ./start.sh | Oturumu ayrılmış halde açar ve betiği çalıştırır |
screen -ls | Mevcut oturumları listeler |
screen -r mc | “mc” oturumuna geri döner (attach) |
screen -d -r mc | Başka yerde açık kalmış oturumu zorla alır |
| Ctrl+A → D | Oturumdan ayrılır, süreç çalışmaya devam eder |
| Ctrl+A → Esc | Kaydırma moduna girer (ok tuşları / PageUp), Esc ile çıkılır |
| Ctrl+A → ? | Kısayol yardımını gösterir |
screen -X -S mc quit | Oturumu dışarıdan kapatır (son çare) |
Varsayılan 100 satırlık kaydırma tamponu, bir hata mesajını yukarı kaydırıp okumaya yetmez. Kalıcı çözüm için ev dizininizde bir .screenrc oluşturun:
cat > ~/.screenrc <<'EOF'
defscrollback 20000
startup_message off
defutf8 on
hardstatus alwayslastline "%{= kG}[ %H ] %{= kw}%-Lw%{= kG}%50>%n%f* %t%{= kw}%+Lw%<"
EOF
Oturumun tüm çıktısını dosyaya da yazdırabilirsiniz. Bu, sunucu beklenmedik şekilde kapandığında son satırları görmek için işe yarar:
screen -L -Logfile /opt/minecraft/server/logs/screen.log -dmS mc ./start.sh
tail -f /opt/minecraft/server/logs/screen.log
tmux Kurulumu ve Minecraft Oturumu Açma#
tmux, screen’in modern muadili. Kurulumu aynı şekilde tek satır:
# Ubuntu / Debian
sudo apt update && sudo apt install -y tmux
# AlmaLinux / Rocky Linux
sudo dnf install -y tmux
tmux -V
# tmux 3.4
Oturum açma ve sunucuyu başlatma:
# Etkilesimli oturum ac
tmux new -s mc
# Oturumun icinde sunucuyu baslat
cd /opt/minecraft/server
./start.sh
# Ayrilmak icin: Ctrl+B ardindan D
Tek komutla, ayrılmış halde başlatmak isterseniz:
tmux new -d -s mc '/opt/minecraft/server/start.sh'
tmux ls
# mc: 1 windows (created ...)
tmux’ta ön ek tuşu Ctrl+B’dir. screen’den geliyorsanız kas hafızanız Ctrl+A’ya alışkın olduğu için ön eki değiştirmek işinizi kolaylaştırır. Aşağıdaki yapılandırma bunu yapar, kaydırma tamponunu büyütür ve fare desteğini açar:
cat > ~/.tmux.conf <<'EOF'
# On eki Ctrl+A yap (screen aliskanligi icin)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
set -g history-limit 50000
set -g mouse on
set -g base-index 1
setw -g mode-keys vi
EOF
# Calisan oturuma uygulamak icin
tmux source-file ~/.tmux.conf
tmux Kısayolları ve Komut Tablosu#
| Komut / kısayol | Ne yapar |
|---|---|
tmux new -s mc | “mc” adında yeni oturum açar |
tmux new -d -s mc './start.sh' | Ayrılmış oturum açıp betiği çalıştırır |
tmux ls | Oturumları listeler |
tmux attach -t mc (kısası tmux a -t mc) | Oturuma geri döner |
tmux kill-session -t mc | Oturumu kapatır |
| Ctrl+B → D | Oturumdan ayrılır |
| Ctrl+B → [ | Kaydırma moduna girer, q ile çıkılır |
| Ctrl+B → c | Yeni pencere açar (ikinci sunucu, log takibi) |
| Ctrl+B → % / " | Ekranı dikey / yatay böler |
| Ctrl+B → ok tuşları | Bölmeler arasında geçiş yapar |
tmux new -d -s mc ile başlayın, sonra tmux new-window -t mc -n lobby '/opt/minecraft/lobby/start.sh' ve tmux new-window -t mc -n survival '/opt/minecraft/survival/start.sh' ekleyin. Pencere adları alt köşede listelenir, Ctrl+B ardından pencere numarasıyla geçiş yaparsınız.Oturuma Girmeden Konsola Komut Göndermek#
Yedekleme betikleri, zamanlanmış duyurular ve otomatik yeniden başlatmalar için sunucu konsoluna dışarıdan komut yazabilmeniz gerekir. Her iki araç da bunu destekler.
screen tarafında stuff alt komutu kullanılır. Komutun sonuna satır sonu karakteri eklemeyi unutmayın; yoksa metin konsola yazılır ama Enter’a basılmamış olur:
# Oyunculara duyuru gonder
screen -S mc -X stuff "say Sunucu 5 dakika icinde yeniden baslatilacak$(printf '\r')"
# Dunyayi diske kaydet
screen -S mc -X stuff "save-all$(printf '\r')"
# Oyuncu listesini konsola bastir
screen -S mc -X stuff "list$(printf '\r')"
tmux tarafında aynı iş send-keys ile yapılır ve satır sonu doğrudan Enter anahtar kelimesiyle verilir:
tmux send-keys -t mc "say Sunucu 5 dakika icinde yeniden baslatilacak" Enter
tmux send-keys -t mc "save-all" Enter
tmux send-keys -t mc "stop" Enter
stuff komutunda \r yerine \n kullanmak bazı kabuklarda çalışmaz. Emin olmak için örneklerdeki $(printf '\r') biçimini koruyun. Komut çalışmadıysa önce screen -ls ile oturum adının gerçekten mc olduğunu doğrulayın.Güvenli Kapatma ve Otomatik Yeniden Başlatma Betiği#
Sunucuyu kill -9 ile öldürmek chunk bozulmasına, envanter kaybına ve region dosyası hasarına yol açabilir. Doğru kapatma sırası: oyuncuları uyar, dünyayı kaydet, stop gönder, sürecin gerçekten bittiğini bekle. Aşağıdaki betik bunu yapar:
#!/bin/bash
# /opt/minecraft/restart.sh
SESSION="mc"
START="/opt/minecraft/server/start.sh"
send() { screen -S "$SESSION" -X stuff "$1$(printf '\r')"; }
send "say Sunucu 60 saniye icinde yeniden baslatiliyor"
sleep 30
send "say Sunucu 30 saniye icinde yeniden baslatiliyor"
sleep 20
send "say 10 saniye"
sleep 10
send "save-all"
sleep 5
send "stop"
# Surec bitene kadar bekle (en fazla 60 saniye)
for i in $(seq 1 60); do
screen -ls | grep -q "$SESSION" || break
sleep 1
done
# Oturum hala duruyorsa temizle
screen -ls | grep -q "$SESSION" && screen -X -S "$SESSION" quit
screen -dmS "$SESSION" "$START"
echo "$(date '+%F %T') sunucu yeniden baslatildi"
chmod +x /opt/minecraft/restart.sh
# Her gece 05:00'te calistir
crontab -e
# Dosyaya eklenecek satir:
0 5 * * * /opt/minecraft/restart.sh >> /opt/minecraft/restart.log 2>&1
Yeniden başlatmadan önce dünya yedeği almak isterseniz betiğin stop satırından sonrasına bir tar komutu ekleyin. Tam yedekleme stratejisi için Minecraft sunucu yedekleme rehberine bakın.
Sunucu Yeniden Başladığında Oturumu Otomatik Açmak#
screen ve tmux oturumları makine yeniden başladığında kaybolur. Hızlı bir çözüm crontab’ın @reboot girdisidir:
sudo -u minecraft crontab -e
# Dosyaya eklenecek satir:
@reboot /usr/bin/screen -dmS mc /opt/minecraft/server/start.sh
Bu yöntem çalışır ama eksiktir: sunucu çökerse yeniden başlatılmaz, açılış sırası garanti edilmez ve logları merkezî olarak izleyemezsiniz. Üretim sunucusunda doğru araç systemd’dir. Servis birimi hem açılışta çalıştırır hem çökme sonrası otomatik kaldırır:
[Unit]
Description=Minecraft Paper Sunucusu
After=network-online.target
[Service]
User=minecraft
WorkingDirectory=/opt/minecraft/server
Environment="JAVA_HOME=/usr/lib/jvm/temurin-25-jdk-amd64"
ExecStart=/usr/bin/screen -DmS mc /opt/minecraft/server/start.sh
ExecStop=/usr/bin/screen -S mc -X stuff "stop\015"
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
Buradaki -DmS (büyük D) parametresine dikkat edin: screen’i ön planda tutar, böylece systemd sürecin gerçekten çalıştığını görebilir. Küçük -d kullanırsanız systemd süreç bitti sanır ve servisi hemen kapatır. Servis dosyasının tam anlatımı, journalctl ile log okuma ve ExecStop zaman aşımı ayarları için systemd servisi ile otomatik başlatma sayfasına geçin.
Sık Karşılaşılan screen ve tmux Hataları#
There is no screen to be resumed matching mc#
Bu adla oturum yok. Genellikle sunucu çöktüğü için oturum da sonlanmıştır. screen -ls boş dönüyorsa tail -n 50 /opt/minecraft/server/logs/latest.log ile son satırları okuyun. Bellek yetersizliği gördüyseniz Out of Memory hatası çözümüne, anlamsız bir yığın izi gördüyseniz crash report okuma sayfasına bakın.
There is a screen on: 18422.mc (Attached)#
Oturum başka bir yerde açık görünüyor; genellikle SSH bağlantısı düzgün kapanmadığı için gerçekte kimse bağlı değildir. Zorla devralın:
screen -d -r mc
Cannot open your terminal '/dev/pts/0'#
su veya sudo -u ile başka kullanıcıya geçtikten sonra screen açmaya çalışırken görülür; terminal aygıtı hâlâ önceki kullanıcıya aittir. Doğru yol sudo -u minecraft -s yerine sudo machinectl shell minecraft@ ya da doğrudan sudo -u minecraft screen -dmS mc ./start.sh biçiminde ayrılmış oturum açmaktır.
Oturuma girdim ama ekran boş / yazılar bozuk#
Terminal boyutu ile oturumun kaydettiği boyut uyuşmuyordur. screen’de Ctrl+A ardından F ile yeniden boyutlandırın, tmux’ta tmux attach -d -t mc komutu pencereyi mevcut terminale göre yeniden çizer. UTF-8 sorunu için screen -U -r mc deneyin.
screen içinde Türkçe karakterler bozuk çıkıyor#
Yerel ayarlar eksiktir. locale çıktısında LANG boşsa şu komutları çalıştırın:
sudo locale-gen tr_TR.UTF-8 en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8
echo "defutf8 on" >> ~/.screenrc
screen mi systemd mi? Üretim İçin Doğru Seçim#
İkisi rakip değil, farklı işleri yapan araçlar. Pratik ayrım şudur:
- screen / tmux
- Kurulum sırasında, test ederken, bir eklentiyi denerken ve konsolu canlı izlemek istediğinizde. Kurulumu saniyeler sürer, hiçbir yapılandırma gerektirmez.
- systemd
- Sunucu yayına girdikten sonra. Makine yeniden başlayınca otomatik açılma, çökme sonrası otomatik kaldırma,
journalctlile merkezî log ve kaynak sınırları burada. - İkisi birlikte
- Yukarıdaki servis biriminde olduğu gibi, systemd’nin screen oturumu başlatması en yaygın kurulumdur: hem servis güvencesi hem de
screen -r mcile canlı konsol erişimi elde edersiniz.
Yönetim panelli bir çözüm istiyorsanız bu katmanı Pterodactyl gibi paneller sizin yerinize kurar; konsol tarayıcıdan gelir, screen’e hiç ihtiyaç duymazsınız. Panel kurulumu için Pterodactyl Panel kurulum rehberine bakabilir ya da hazır panelli Minecraft sunucu paketlerini tercih edebilirsiniz. Kendi VDS’inizi yönetiyorsanız Linux üzerinde Minecraft sunucu kurulumu sayfası bu sayfadaki adımların tamamını uçtan uca bir akışa oturtuyor.
Özetle#
SSH oturumu kapanınca Minecraft sunucusunun durmasının sebebi SIGHUP sinyalidir; çözüm sunucuyu screen ya da tmux oturumu içinde başlatmaktır. screen için screen -dmS mc ./start.sh ile başlatır, screen -r mc ile konsola döner, Ctrl+A ardından D ile ayrılırsınız. tmux’ta karşılıkları tmux new -d -s mc, tmux attach -t mc ve Ctrl+B ardından D’dir. Konsola dışarıdan komut göndermek için screen’de stuff, tmux’ta send-keys kullanılır; bu, zamanlanmış yeniden başlatma ve yedekleme betiklerinin temelidir. Sunucuyu asla kill -9 ile kapatmayın, önce save-all sonra stop gönderin. Makine yeniden başladığında oturumun geri gelmesi gerekiyorsa crontab’ın @reboot satırı geçici çözümdür; kalıcı ve doğru yol systemd servisidir.