Lewati ke isi

Server & Infrastruktur

Cara Mengatur Zona Waktu dan Sinkron Jam Server Linux

Langkah mengganti zona waktu ke Asia/Jakarta dengan timedatectl, mengaktifkan sinkron NTP lewat systemd-timesyncd atau chrony, dan mengecek hasilnya.

Terbit 5 menit baca

Jawaban singkat

Ganti zona waktu dengan sudo timedatectl set-timezone Asia/Jakarta, lalu pastikan sinkron NTP aktif dengan timedatectl set-ntp true. Ubuntu memakai systemd-timesyncd, AlmaLinux memakai chrony. Cek hasilnya lewat timedatectl status.

Daftar isi
  1. Kenapa jam server harus akurat?
  2. Langkah mengatur zona waktu dan sinkron jam
  3. Langkah 1: Cek kondisi sekarang
  4. Langkah 2: Cari nama zona waktu yang benar
  5. Langkah 3: Ganti zona waktu
  6. Langkah 4: Aktifkan sinkron NTP
  7. Langkah 5: Atur server NTP (opsional)
  8. Langkah 6: Pastikan sinkron berhasil
  9. Langkah 7: Restart layanan yang berjalan lama
  10. Zona waktu aplikasi bisa berbeda dari sistem
  11. Bagaimana dengan jam hardware (RTC)?
  12. Pertanyaan yang sering diajukan
  13. Checklist sebelum selesai

Pernah melihat jadwal backup jalan jam tiga sore padahal diatur jam sepuluh malam? Atau stempel waktu di log selisih tujuh jam dari jam di laptopmu? Hampir pasti penyebabnya zona waktu server masih UTC, bawaan banyak image VPS.

Jawabannya singkat: atur zona waktu dengan timedatectl set-timezone, lalu pastikan jam server tersinkron otomatis ke server NTP. Dua hal ini berbeda. Zona waktu menentukan cara jam ditampilkan, sedangkan NTP menjaga agar jamnya sendiri tepat.

Kenapa jam server harus akurat?

Jam yang meleset beberapa menit saja bisa menimbulkan masalah yang membingungkan:

  • Sertifikat SSL dan token login (misalnya kode 2FA berbasis waktu) bisa dianggap belum berlaku atau sudah kedaluwarsa.
  • Urutan log dari beberapa server jadi tidak cocok saat kamu menelusuri insiden.
  • Cron job berjalan di jam yang tidak kamu harapkan.
  • Replikasi database dan sistem terdistribusi bisa bermasalah bila jam antar-server berbeda jauh.

Langkah mengatur zona waktu dan sinkron jam

Langkah berikut berlaku untuk Ubuntu, Debian, dan AlmaLinux karena semuanya memakai systemd.

Langkah 1: Cek kondisi sekarang

timedatectl

Perhatikan tiga baris: Time zone, System clock synchronized, dan NTP service. Bila tertulis Time zone: Etc/UTC (UTC, +0000) dan kamu ingin waktu Jakarta, lanjut ke langkah 2.

Langkah 2: Cari nama zona waktu yang benar

timedatectl list-timezones | grep Asia/

Indonesia punya tiga zona waktu (WIB, WITA, WIT), dengan WIB terbagi ke dua nama zona di basis data tz:

WilayahNama zonaSelisih dari UTC
WIB (Jawa, Sumatra)Asia/Jakarta+07:00
WIB (Kalimantan Barat dan Tengah)Asia/Pontianak+07:00
WITA (Bali, Sulawesi, NTB, NTT, Kalimantan Selatan, Timur, dan Utara)Asia/Makassar+08:00
WIT (Maluku, Papua)Asia/Jayapura+09:00

Untuk server yang melayani pengguna di seluruh Indonesia, Asia/Jakarta paling umum dipakai. Sebagian tim memilih tetap memakai UTC di server dan baru mengonversi di aplikasi. Keduanya sah, yang penting konsisten di semua server.

Langkah 3: Ganti zona waktu

sudo timedatectl set-timezone Asia/Jakarta

Perintah ini mengubah symlink /etc/localtime. Jalankan date untuk memastikan jam yang tampil sudah benar.

Langkah 4: Aktifkan sinkron NTP

sudo timedatectl set-ntp true

Perintah ini menyalakan layanan sinkron waktu bawaan distro. Di Ubuntu 24.04 layanannya systemd-timesyncd. Di AlmaLinux 9 layanannya chronyd dari paket chrony. Bila muncul pesan bahwa NTP tidak didukung, artinya belum ada layanan sinkron yang terpasang (lihat langkah 5).

Langkah 5: Atur server NTP (opsional)

Server bawaan distro biasanya sudah cukup. Bila ingin memakai pool Indonesia dari NTP Pool Project, atur sesuai layanannya.

Untuk systemd-timesyncd (Ubuntu), edit /etc/systemd/timesyncd.conf:

[Time]
NTP=0.id.pool.ntp.org 1.id.pool.ntp.org 2.id.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Lalu terapkan:

sudo systemctl restart systemd-timesyncd

Untuk chrony (AlmaLinux), edit /etc/chrony.conf. Ganti atau tambahkan baris pool:

pool id.pool.ntp.org iburst

Lalu terapkan:

sudo systemctl enable --now chronyd
sudo systemctl restart chronyd

Bila server belum punya layanan sinkron sama sekali, pasang salah satunya: sudo apt install systemd-timesyncd di Ubuntu/Debian, atau sudo dnf install chrony di AlmaLinux. Jangan menjalankan dua layanan sinkron sekaligus, karena keduanya akan saling berebut mengatur jam.

Langkah 6: Pastikan sinkron berhasil

Untuk systemd-timesyncd:

timedatectl timesync-status

Untuk chrony:

chronyc tracking
chronyc sources -v

Di chronyc sources, baris yang diawali ^* adalah server yang sedang dipakai. Di timedatectl, baris System clock synchronized: yes berarti jam sudah tersinkron.

Langkah 7: Restart layanan yang berjalan lama

Proses yang sudah berjalan sebelum zona waktu diganti kadang masih memakai zona lama. Restart layanan penting seperti cron, PHP-FPM, dan aplikasi milikmu, atau reboot server di jam sepi agar semuanya seragam.

Zona waktu aplikasi bisa berbeda dari sistem

Mengganti zona waktu sistem tidak otomatis mengubah semua aplikasi. Beberapa yang sering terlewat:

  • PHP punya setelan date.timezone di php.ini. Bila diisi UTC, fungsi tanggal PHP tetap memakai UTC.
  • MySQL dan MariaDB memakai zona sistem bila variabel time_zone bernilai SYSTEM. Restart database setelah zona sistem diganti.
  • Container Docker tidak ikut zona host. Atur lewat variabel TZ=Asia/Jakarta bila image mendukungnya, atau mount /etc/localtime sebagai read-only.
  • Cron membaca jadwal sesuai zona sistem, jadi jadwal lama perlu dicek ulang setelah zona diganti. Panduan lengkapnya ada di cara membuat cron job di Linux.

Bagaimana dengan jam hardware (RTC)?

Server punya jam hardware selain jam sistem. Di Linux, jam hardware sebaiknya disimpan dalam UTC. Cek baris RTC in local TZ di keluaran timedatectl. Bila tertulis yes, kembalikan ke UTC:

sudo timedatectl set-local-rtc 0

Di VPS, jam hardware dikelola hypervisor, jadi biasanya kamu cukup memastikan NTP aktif.

Pertanyaan yang sering diajukan

Apakah mengganti zona waktu membutuhkan reboot?

Tidak wajib. Perubahan langsung berlaku untuk proses baru. Proses yang sudah berjalan sebaiknya direstart agar ikut memakai zona baru.

Lebih baik server memakai UTC atau Asia/Jakarta?

Tergantung kebiasaan tim. UTC memudahkan bila server tersebar di banyak negara. Asia/Jakarta memudahkan membaca log dan jadwal untuk bisnis yang seluruhnya di Indonesia. Yang penting semua server memakai pilihan yang sama.

Jam server selisih beberapa menit, apakah langsung dikoreksi?

Chrony dan systemd-timesyncd mengoreksi jam secara bertahap atau melompat sesuai besar selisih dan konfigurasinya. Di chrony, opsi makestep di chrony.conf mengizinkan lompatan langsung saat awal sinkron.

Bagaimana mengatur zona waktu di container Docker?

Tambahkan environment TZ=Asia/Jakarta bila image mendukung tzdata, atau mount /etc/localtime dari host secara read-only.

Checklist sebelum selesai

Sebelum menutup terminal, pastikan semua poin ini terpenuhi:

  • timedatectl menampilkan zona waktu yang benar.
  • System clock synchronized: yes.
  • Hanya satu layanan sinkron waktu yang aktif.
  • UDP 123 keluar tidak diblokir.
  • Zona waktu PHP, database, dan container sudah dicek.

Sumber & referensi

Baca juga