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.
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
- Kenapa jam server harus akurat?
- Langkah mengatur zona waktu dan sinkron jam
- Langkah 1: Cek kondisi sekarang
- Langkah 2: Cari nama zona waktu yang benar
- Langkah 3: Ganti zona waktu
- Langkah 4: Aktifkan sinkron NTP
- Langkah 5: Atur server NTP (opsional)
- Langkah 6: Pastikan sinkron berhasil
- Langkah 7: Restart layanan yang berjalan lama
- Zona waktu aplikasi bisa berbeda dari sistem
- Bagaimana dengan jam hardware (RTC)?
- Pertanyaan yang sering diajukan
- 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:
| Wilayah | Nama zona | Selisih 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.timezonediphp.ini. Bila diisiUTC, fungsi tanggal PHP tetap memakai UTC. - MySQL dan MariaDB memakai zona sistem bila variabel
time_zonebernilaiSYSTEM. Restart database setelah zona sistem diganti. - Container Docker tidak ikut zona host. Atur lewat variabel
TZ=Asia/Jakartabila image mendukungnya, atau mount/etc/localtimesebagai 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:
timedatectlmenampilkan 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.


