TürkiyeVPS

Sunucu Yönetiminde İşe Yarayan Komutlar: htop, df/du, journalctl, ufw, rsync, cron

Sunucu yavaşladığında, disk dolduğunda ya da bir servis çöktüğünde ilk bakacağınız araçlar. htop, df/du, journalctl, ufw, rsync ve cron'u gerçek senaryolar üzerinden anlatıyoruz.

6 dk okuma

Temel Linux komutlarını öğrendikten sonra sıra sunucuyu sağlıklı tutmaya gelir. Bir sunucu yöneticisinin günlük işleri çoğunlukla birkaç soruya cevap aramaktır: Sunucu neden yavaş? Disk neden doldu? Servis neden kapandı? Yedeklerim düzenli alınıyor mu? Bu yazıda bu sorulara cevap veren altı aracı, Ubuntu 24.04 üzerinde gerçek kullanım senaryolarıyla anlatıyoruz.

htop: Sunucu neden yavaş?

top her Linux'ta bulunur, ama htop çok daha okunaklıdır: renkli çubuklar, fareyle seçim, kolay sıralama ve süreç ağacı sunar.

sudo apt install -y htop
htop

Ekranın üst kısmında şunları görürsünüz:

  • CPU çubukları: Her çekirdeğin doluluk oranı. Tüm çubuklar sürekli doluysa işlemci yetmiyor olabilir.
  • Mem ve Swp: RAM ve takas alanı kullanımı. Swap sürekli doluyorsa RAM yetersizdir ve sunucu diske yazarak yavaşlar.
  • Load average: Son 1, 5 ve 15 dakikanın ortalama yükü. Kabaca, çekirdek sayısını sürekli aşan değerler kuyrukta bekleyen iş olduğunu gösterir.

Kullanışlı kısayollar:

Tuş İşlev
F6 veya > Sıralama ölçütünü seçer (CPU%, MEM% vb.)
F4 Süreç adına göre filtreler
F5 Ağaç görünümü (hangi süreç hangisini başlattı)
F9 Seçili sürece sinyal gönderir (durdurma)
q Çıkış

İpucu: htop'taki CPU% sütununda %100'ü aşan değerler görebilirsiniz; bu, sürecin birden fazla çekirdek kullandığı anlamına gelir.

Anlık RAM durumuna hızlıca bakmak için free -h de yeterlidir. available sütunu, uygulamaların gerçekten kullanabileceği belleği gösterir; free sütunundaki düşük değer tek başına sorun değildir, çünkü Linux boş belleği önbellek olarak kullanır.

df ve du: Disk neden doldu?

Disk dolduğunda veritabanları yazamaz, günlükler kesilir ve web siteleri hata vermeye başlar. Önce genel tabloya bakın:

df -h

Use% sütunu %90'ı aşan bir bölüm varsa nereyi kapladığını bulmak için du kullanın:

sudo du -h --max-depth=1 / 2>/dev/null | sort -h

Bu komut kök dizindeki her klasörün toplam boyutunu küçükten büyüğe sıralar. En büyük klasörün içine girerek aynı komutu tekrarlayın, suçluyu birkaç adımda bulursunuz:

sudo du -h --max-depth=1 /var | sort -h
sudo du -h --max-depth=1 /var/log | sort -h

En sık karşılaşılan sebepler ve çözümleri:

sudo journalctl --vacuum-size=200M   # systemd günlüklerini 200 MB'a indirir
sudo apt clean                        # indirilmiş paket önbelleğini siler
docker system df                      # Docker kullanıyorsanız imaj/volume boyutları

Bazen df diskin dolu olduğunu söyler ama du o kadar dosya bulamaz. Bu genellikle silinmiş ama hâlâ bir süreç tarafından açık tutulan bir dosyadan kaynaklanır. sudo lsof +L1 ile bu dosyaları görebilir, ilgili servisi yeniden başlatarak alanı geri kazanabilirsiniz. Disk dolu görünmediği halde dosya oluşturamıyorsanız df -i ile inode kullanımını kontrol edin.

journalctl: Servis neden çöktü?

Ubuntu'da servislerin çoğu günlüklerini systemd'nin günlük sistemine yazar. journalctl bu kayıtları okur:

journalctl -u nginx                 # yalnızca nginx servisinin kayıtları
journalctl -u nginx -n 100 --no-pager   # son 100 satır
journalctl -u myapp -f              # canlı izleme (tail -f gibi)
journalctl --since "1 hour ago"     # son bir saatteki tüm kayıtlar
journalctl -p err -b                # bu açılıştan beri yalnızca hatalar
journalctl -b -1                    # bir önceki açılışın kayıtları

Bir servis çalışmıyorsa sırayla şunları yapın: systemctl status servis-adi ile durumuna bakın, ardından journalctl -u servis-adi -n 50 ile son hata mesajlarını okuyun. Hata mesajının ilk satırı çoğu zaman sorunu doğrudan söyler: eksik dosya, kullanılan port, hatalı ayar satırı gibi.

Nginx ve bazı veritabanları kendi dosyalarına da yazar; bunlar /var/log/nginx/ gibi klasörlerde durur ve tail -f ile izlenir.

Günlüklerin ne kadar yer kaplayacağını kalıcı olarak sınırlamak isterseniz /etc/systemd/journald.conf dosyasında SystemMaxUse=500M satırını ekleyip sudo systemctl restart systemd-journald çalıştırın.

ufw: Hangi portlar açık?

UFW (Uncomplicated Firewall), Ubuntu'nun güvenlik duvarını basit komutlarla yönetmenizi sağlar.

Önemli: UFW'yi etkinleştirmeden önce mutlaka SSH'a izin verin. Aksi halde bağlantınız kesilir ve sunucuya yalnızca panelin konsolu üzerinden ulaşabilirsiniz.

sudo ufw allow OpenSSH          # SSH (22) portuna izin
sudo ufw allow 80,443/tcp       # web trafiği
sudo ufw enable
sudo ufw status numbered        # kuralları numaralı listeler

Sık kullanılan diğer kurallar:

sudo ufw allow from 203.0.113.10 to any port 5432   # PostgreSQL'e yalnızca bir IP erişsin
sudo ufw deny 3306/tcp                               # MySQL portunu dışarıya kapat
sudo ufw delete 3                                    # 3 numaralı kuralı sil
sudo ufw limit OpenSSH                               # çok sık bağlantı denemelerini sınırla

SSH portunu değiştirdiyseniz OpenSSH yerine yeni port numarasını yazın (sudo ufw allow 2222/tcp). Daha kapsamlı sertleştirme adımları için Linux sunucu güvenliği rehberimize bakabilirsiniz.

rsync: Dosyaları güvenle kopyalamak ve yedeklemek

rsync, dosyaları yerel olarak ya da SSH üzerinden başka bir makineye kopyalar. En büyük avantajı yalnızca değişen kısımları aktarmasıdır; ikinci kopyalama çok hızlı biter.

rsync -avh /var/www/ /yedek/www/                        # yerel kopya
rsync -avh /var/www/ [email protected]:/yedek/www/ # başka sunucuya
rsync -avh --delete /var/www/ /yedek/www/              # kaynakta silineni hedefte de sil
rsync -avh --dry-run --delete /var/www/ /yedek/www/    # önce ne yapacağını göster

Parametreler: -a izinleri, sahiplikleri ve tarihleri korur; -v ayrıntı gösterir; -h boyutları okunaklı yazar. --exclude ile istemediğiniz klasörleri dışarıda bırakabilirsiniz:

rsync -avh --exclude 'node_modules' --exclude '.cache' /srv/proje/ /yedek/proje/

Sondaki eğik çizgiye dikkat: /var/www/ klasörün içeriğini, /var/www ise klasörün kendisini kopyalar. --delete kullanırken bu fark önemlidir; emin değilseniz önce --dry-run ile deneyin.

Veritabanı dosyalarını servis çalışırken doğrudan kopyalamak tutarsız yedek üretebilir. Önce mysqldump veya pg_dump ile döküm alıp o dosyayı rsync ile aktarın.

cron: Görevleri zamanlamak

cron, komutları belirli aralıklarla otomatik çalıştırır. Kendi kullanıcınızın görev listesini düzenlemek için:

crontab -e

Her satır beş zaman alanı ve bir komuttan oluşur: dakika, saat, ayın günü, ay, haftanın günü.

# Her gece 03:00'te web dosyalarını yedekle
0 3 * * * rsync -a --delete /var/www/ /yedek/www/ >> /var/log/yedek.log 2>&1

# Her 15 dakikada bir betik çalıştır
*/15 * * * * /usr/local/bin/kontrol.sh

# Her pazartesi 09:30'da
30 9 * * 1 /usr/local/bin/haftalik-rapor.sh

İyi alışkanlıklar:

  • Komutlarda tam yol kullanın; cron'un PATH değişkeni oturumunuzdakinden kısadır.
  • Çıktıyı bir dosyaya yönlendirin (>> dosya.log 2>&1), yoksa hatalar sessizce kaybolur.
  • Zamanlamayı yazmadan önce crontab.guru gibi bir araçla kontrol edin.
  • Mevcut görevleri crontab -l ile listeleyin. cron'un çalışıp çalışmadığını journalctl -u cron ile görebilirsiniz.

Modern alternatif olarak systemd zamanlayıcıları (timers) da kullanılabilir; günlükleri journalctl ile görünür ve kaçırılan görevleri telafi edebilir. Yine de basit işler için cron hâlâ en pratik yoldur.

Kısa kontrol listesi

Sunucuda bir sorun olduğunda şu sırayı izlemek çoğu zaman yeterlidir:

  1. htop ve free -h: işlemci ve RAM durumu
  2. df -h: disk doluluğu
  3. systemctl status servis ve journalctl -u servis: servis durumu ve hata mesajı
  4. sudo ufw status: erişim sorunu varsa güvenlik duvarı kuralları

TürkiyeVPS müşteri panelinde VPS sunucunuzun kaynak kullanımını ve aylık trafiğini de takip edebilirsiniz; komut satırındaki bu araçlarla birlikte kullanıldığında sorunların kaynağını bulmak kolaylaşır.

Sık Sorulan Sorular

htop ile top arasındaki fark nedir?

İkisi de çalışan süreçleri ve kaynak kullanımını gösterir. htop renkli ve etkileşimlidir: fareyle seçim, kolay sıralama, filtreleme ve ağaç görünümü sunar. top ise her sistemde kurulu gelir.

df ile du neden farklı sonuç veriyor?

df dosya sisteminin genel doluluğunu, du ise klasörlerdeki dosyaların toplam boyutunu ölçer. Silinmiş ama hâlâ açık tutulan dosyalar df'de yer kaplamaya devam eder, du'da görünmez. İlgili servisi yeniden başlatmak alanı geri kazandırır.

rsync ile scp arasındaki fark nedir?

scp dosyaları her seferinde baştan kopyalar. rsync ise yalnızca değişen kısımları aktarır, yarıda kalan aktarımı sürdürebilir ve silme, hariç tutma gibi senkronizasyon seçenekleri sunar. Düzenli yedek için rsync daha uygundur.

Cron görevim çalışmıyor, nasıl kontrol ederim?

Önce crontab -l ile görevin kayıtlı olduğundan emin olun. Ardından journalctl -u cron ile cron'un görevi başlatıp başlatmadığına bakın. Çoğu sorun, komutta tam yol kullanılmamasından veya betiğin çalıştırma izni olmamasından kaynaklanır.