
Sunucu saat ayarı, kurulumdan sonra en kolay unutulan ama yanlış olduğunda en garip hatalara yol açan konulardan biridir. Saati birkaç dakika kaymış bir sunucuda SSL bağlantıları reddedilebilir, iki adımlı doğrulama kodları geçersiz sayılabilir ve günlük kayıtları birbirini tutmaz hale gelir. Bu rehberde Ubuntu 22.04/24.04 ve AlmaLinux 9 üzerinde saat dilimini nasıl ayarlayacağınızı, chrony ile NTP senkronizasyonunu nasıl kuracağınızı ve sanal sunuculara özgü saat kayması sorunlarını nasıl çözeceğinizi anlatıyoruz.
Sunucu Saati Neden Bu Kadar Önemli?
Doğru saat, sunucudaki pek çok mekanizmanın sessiz bir ön koşuludur:
- TLS ve SSL: Sertifikaların geçerlilik başlangıç ve bitiş tarihleri vardır. Saati geride kalan bir sunucu, yeni alınmış bir sertifikayı henüz geçerli değil diye reddedebilir.
- İki adımlı doğrulama (TOTP): Kodlar 30 saniyelik zaman pencerelerine göre üretilir. Saat bir dakikadan fazla kaydığında kodlar tutmaz.
- Günlükler ve olay incelemesi: Bir güvenlik olayını incelerken farklı sunuculardaki kayıtları yan yana koyarsınız. Saatler tutarsızsa olayların sırası anlaşılmaz.
- Zamanlanmış görevler: Cron işleri sistem saatine göre çalışır; yanlış saat dilimi yedeklerin mesai saatinde alınmasına yol açabilir.
- Veritabanı çoğaltma ve kimlik doğrulama: Çoğaltma gecikmesi ölçümleri ve Kerberos gibi protokoller sunucular arasında saat uyumu bekler.
- Alım satım uygulamaları: Borsa ve forex platformlarında emir zaman damgaları doğrudan saat doğruluğuna bağlıdır.
Mevcut Saat Durumunu Görüntüleme
systemd kullanan tüm modern dağıtımlarda saat bilgisi timedatectl komutuyla görüntülenir:
timedatectl
Çıktıda dikkat etmeniz gereken satırlar şunlardır:
| Satır | Anlamı |
|---|---|
| Local time | Seçili saat dilimine göre yerel saat |
| Universal time | UTC saati |
| RTC time | Donanım saati (sanal sunucuda hipervizörün sunduğu saat) |
| Time zone | Etkin saat dilimi, örneğin Europe/Istanbul (+03) |
| System clock synchronized | yes ise saat bir NTP kaynağıyla senkronize |
| NTP service | active ise senkronizasyon servisi çalışıyor |
System clock synchronized: no görüyorsanız sunucunuzun saati hiçbir kaynağa göre düzeltilmiyor demektir; aşağıdaki NTP adımlarını mutlaka uygulayın.
Saat Dilimini Ayarlama
Türkiye için saat dilimi Europe/Istanbul'dur. Türkiye 2016'dan bu yana yaz saati uygulamasını bırakarak yıl boyu UTC+3'te kalmaktadır. Mevcut saat dilimlerini listelemek ve ayarlamak için:
timedatectl list-timezones | grep -i istanbul
sudo timedatectl set-timezone Europe/Istanbul
timedatectl
Bu komut /etc/localtime bağlantısını günceller ve Ubuntu ile AlmaLinux'ta aynı şekilde çalışır.
UTC mi, Yerel Saat mi?
Birden fazla ülkede sunucusu olan ekipler, tüm sunucuları UTC'de tutup saati yalnızca uygulama arayüzünde yerel zamana çevirmeyi tercih eder. Bu yaklaşım farklı lokasyonlardaki günlükleri karşılaştırmayı kolaylaştırır. Tek lokasyonda çalışan ve ekibi Türkiye'de olan projelerde ise Europe/Istanbul kullanmak, günlükleri okurken ve cron zamanlarını yazarken kafa karışıklığını azaltır. Hangisini seçerseniz seçin, tüm sunucularınızda tutarlı olun.
Saat Dilimi Değişikliğinden Sonra
Çalışan bazı servisler saat dilimini yalnızca başlarken okur. Değişiklikten sonra cron servisini (Ubuntu'da cron, AlmaLinux'ta crond), veritabanını ve uygulama sunucularını yeniden başlatın. Ayrıca PHP'nin php.ini dosyasındaki date.timezone değerini ve MySQL/MariaDB'deki time_zone ayarını kontrol edin; bunlar sistemden bağımsız bir saat dilimine ayarlanmış olabilir.
NTP Senkronizasyonu: timesyncd mi, chrony mi?
Saat diliminin doğru olması, saatin doğru olduğu anlamına gelmez. Saatin kendisini doğru tutmak için NTP (Network Time Protocol) istemcisi gerekir. Dağıtımlar burada farklı varsayılanlar kullanır:
- Ubuntu 22.04 ve 24.04: Varsayılan olarak
systemd-timesyncdgelir. Basit bir SNTP istemcisidir ve çoğu tek sunucu için yeterlidir. - AlmaLinux 9: Varsayılan olarak
chronydkurulu ve etkindir.
chrony, saat kaymasını daha hassas ölçer, ağ kesintilerinden sonra daha hızlı toparlanır, sanal makinelerde daha kararlı çalışır ve gerekirse diğer sunuculara NTP sunucusu olarak hizmet verebilir. Bu yüzden canlı sunucularda chrony tercih edilir.
Ubuntu'da timesyncd ile Devam Etmek
timesyncd kullanmaya devam edecekseniz durumunu kontrol edin:
timedatectl timesync-status
sudo timedatectl set-ntp true
Kullanılan NTP sunucularını değiştirmek için /etc/systemd/timesyncd.conf dosyasında [Time] başlığı altındaki NTP= satırını düzenleyip sudo systemctl restart systemd-timesyncd komutunu çalıştırın.
Ubuntu'da chrony'ye Geçmek
sudo apt update
sudo apt install chrony
chrony kurulduğunda timesyncd ile çakıştığı için paket yöneticisi timesyncd'yi kaldırır; iki NTP istemcisinin aynı anda çalışmaması gerekir. Ubuntu'da yapılandırma dosyası /etc/chrony/chrony.conf, servis adı ise chrony'dir:
sudo systemctl enable --now chrony
AlmaLinux 9'da chrony
chrony zaten kuruludur; çalıştığından emin olun. AlmaLinux'ta yapılandırma dosyası /etc/chrony.conf, servis adı chronyd'dir:
sudo systemctl enable --now chronyd
systemctl status chronyd
Minimal kurulumlarda paket yoksa sudo dnf install chrony ile ekleyebilirsiniz.
chrony Yapılandırması
Varsayılan yapılandırma, dağıtımın NTP havuzunu kullanır ve çoğu durumda doğrudan çalışır. Türkiye lokasyonlu sunucularda yakın bir zaman kaynağı eklemek isterseniz TÜBİTAK UME'nin NTP sunucusunu ve Türkiye NTP havuzunu ekleyebilirsiniz. Yapılandırma dosyasına (Ubuntu'da /etc/chrony/chrony.conf, AlmaLinux'ta /etc/chrony.conf) şu satırları ekleyin:
server time.ume.tubitak.gov.tr iburst
pool tr.pool.ntp.org iburst
iburst parametresi, servis başladığında ilk ölçümlerin hızlıca yapılmasını sağlar. Değişiklikten sonra servisi yeniden başlatın: Ubuntu'da sudo systemctl restart chrony, AlmaLinux'ta sudo systemctl restart chronyd.
NTP, UDP 123 portunu kullanır. Sunucunuzda giden trafiği kısıtlayan bir güvenlik duvarı kuralı varsa bu porta çıkışa izin verildiğinden emin olun. Yalnızca istemci olarak çalışırken gelen trafik için port açmanız gerekmez.
makestep: Büyük Saat Farklarını Düzeltmek
chrony normalde saati aniden değiştirmez; saati hafifçe hızlandırıp yavaşlatarak (slew) zamanla doğru değere yaklaştırır. Bu, uygulamaların zamanın geri gittiğini görmesini engeller. Varsayılan yapılandırmadaki şu satır, yalnızca ilk üç güncellemede ve fark bir saniyeden büyükse saatin tek seferde düzeltilmesine izin verir:
makestep 1.0 3
Sanal sunucularda, özellikle ana makinede bakım veya canlı taşıma yapıldıktan sonra, saat çalışma sırasında da birkaç saniye kayabilir. Bu durumda düzeltme slew ile çok uzun sürer. Saatin her zaman tek seferde düzeltilmesine izin vermek için değeri şöyle değiştirebilirsiniz:
makestep 1.0 -1
Bu ayar saat kaymalarını hemen düzeltir; karşılığında saat nadiren de olsa ileri veya geri sıçrayabilir. Zamanın geri gitmesine hassas uygulamalarınız varsa bu riski değerlendirin. Anlık bir düzeltmeyi elle tetiklemek için sudo chronyc makestep komutunu kullanabilirsiniz.
Senkronizasyonu Doğrulama
chronyc tracking
chronyc sources -v
chronyc tracking çıktısındaki System time satırı, sunucu saatinin NTP zamanından ne kadar uzak olduğunu gösterir; değer milisaniyeler mertebesinde olmalıdır. Leap status satırında Normal görmelisiniz. chronyc sources çıktısında başında ^* işareti olan satır, şu anda senkronize olunan kaynaktır. Hiçbir satırda yıldız yoksa sunucu henüz bir kaynağa kilitlenmemiştir; UDP 123 erişimini kontrol edin.
Uygulamalarda Saat Dilimini Kontrol Etmek
Sistem saati doğru olduğu halde uygulamada saatlerin üç saat kaydığını görüyorsanız sorun büyük ihtimalle uygulama katmanındaki ayrı bir saat dilimi ayarıdır. Aşağıdaki kontrollerle hangi katmanın farklı davrandığını hızlıca bulabilirsiniz:
# Sistem
date
timedatectl | grep 'Time zone'
# PHP (CLI ve FPM için ayrı php.ini dosyaları olabilir)
php -r 'echo date_default_timezone_get(), PHP_EOL;'
# MySQL / MariaDB
sudo mariadb -e "SELECT @@global.time_zone, @@session.time_zone, NOW();"
Veritabanında time_zone değeri SYSTEM görünüyorsa veritabanı sistem saat dilimini kullanır. PHP'de ise CLI ve FPM'in farklı php.ini dosyaları okuduğunu unutmayın; birinde ayar yapıp diğerini unutmak, komut satırından çalışan zamanlanmış görevlerle web tarafının farklı saat üretmesine yol açar. En temiz yaklaşım, tüm katmanlarda aynı saat dilimini açıkça tanımlamaktır.
Donanım Saati (RTC) Ayarı
Linux, donanım saatinin UTC olarak tutulmasını bekler. timedatectl çıktısında RTC in local TZ: yes görüyorsanız, saat dilimi değişikliklerinde ve yaz saati geçişlerinde sorun yaşanabilir. Donanım saatini UTC'ye çevirmek için:
sudo timedatectl set-local-rtc 0
Kendi NTP Sunucunuzu Çalıştırmak
Birden fazla sunucunuz varsa birini iç ağınız için zaman sunucusu yapabilirsiniz. chrony yapılandırmasına izin verilecek ağı ekleyin:
allow 10.0.0.0/8
Ardından güvenlik duvarında yalnızca bu ağa UDP 123 izni verin. NTP portunu tüm internete açmayın; yanlış yapılandırılmış NTP sunucuları yansıtma saldırılarında kötüye kullanılabilir.
Windows Sunucular İçin Kısa Not
Windows Server'da saat dilimi tzutil /s "Turkey Standard Time" komutuyla ayarlanır. Zaman senkronizasyonu durumunu görmek için w32tm /query /status, anında senkronizasyon için w32tm /resync kullanılır. Etki alanına (Active Directory) bağlı sunucular saati etki alanı denetleyicisinden alır.
Sık Sorulan Sorular
Saati date komutuyla elle ayarlayabilir miyim?
Ayarlayabilirsiniz, ancak NTP servisi çalışıyorsa değişikliğiniz kısa sürede düzeltilir. Elle ayar yerine NTP'nin doğru çalışmasını sağlamak kalıcı çözümdür.
Sunucu saati neden sürekli kayıyor?
Sanal sunucularda ana makinenin yükü, canlı taşıma veya hipervizör saat kaynağı kaymaya yol açabilir. Çalışan bir NTP istemcisi bu kaymayı sürekli düzeltir. Sorun sürüyorsa makestep ayarını gözden geçirin ve destek ekibine bildirin.
Saat dilimini değiştirmek mevcut verileri etkiler mi?
Sistem saati içeride UTC olarak tutulduğu için dosya zaman damgaları değişmez; yalnızca gösterim değişir. Ancak veritabanına yerel saatle yazılmış değerler varsa uygulamanızın yorumu değişebilir.
timesyncd ile chrony'yi birlikte çalıştırabilir miyim?
Hayır. İki NTP istemcisi aynı saati düzeltmeye çalışırsa birbirleriyle çakışır. Yalnızca birini etkin tutun.
Hangi NTP sunucularını kullanmalıyım?
Dağıtımın varsayılan NTP havuzu çoğu sunucu için yeterlidir. Coğrafi olarak yakın kaynaklar ağ gecikmesini azalttığı için Türkiye'deki sunucularda TÜBİTAK UME ve tr.pool.ntp.org iyi seçeneklerdir. Tek bir kaynağa bağımlı kalmamak için en az üç-dört farklı kaynak tanımlamak, birinin hatalı zaman vermesi durumunda chrony'nin onu ayıklamasını sağlar.
Sunucu saat ayarı birkaç komutluk bir iş olsa da sunucunuzun güvenliği ve günlüklerinizin güvenilirliği buna bağlıdır. Yeni bir sunucu kurduğunuzda bu adımı ilk güvenlik adımlarıyla birlikte tamamlayın; zamanlanmış görevler için ise cron job rehberimize göz atın. Zaman hassasiyeti yüksek alım satım uygulamaları için düşük gecikmeli Matriks sunucusu, genel projeler için ise Türkiye lokasyonlu VDS seçeneklerimizi inceleyebilirsiniz.
Hizmet Sözleşmemiz
Web Koruma
İade Politikamız
