بازگشت به مجله
مدیریت سرورتیم فنی هایوهاست۷ دقیقه مطالعه

تنظیم منطقه زمانی و همگام سازی ساعت سرور

ساعت اشتباه سرور فقط یک عدد نادرست نیست؛ لاگ ها، کرون جاب ها و اعتبارسنجی توکن ها را هم خراب میکند.

زمان سیستم

بیشتر سرورها با منطقه زمانی UTC تحویل داده میشوند و این برای خیلی از کاربردها کاملا درست است. اما وقتی گزارش ها را با ساعت محلی مقایسه میکنید یا کرون جابی دارید که باید ساعت مشخصی از شب اجرا شود، این اختلاف دردسر میسازد. تنظیم آن یک دستور بیشتر نیست، ولی چند نکته دارد که اگر ندانید بعدا سردرگم میشوید.

1

چرا ساعت درست بیشتر از یک جزئیات است

زمان نادرست روی بخش های بیشتری از سیستم اثر میگذارد که معمولا به آنها فکر نمیکنیم. اگر ساعت سرور چند دقیقه جلو یا عقب باشد، اعتبارسنجی گواهی ها و توکن های زماندار ممکن است شکست بخورد و علت آن هم به سادگی پیدا نمیشود.

  • لاگ ها با زمان اشتباه ثبت میشوند و بررسی حادثه ها سخت میشود.
  • کرون جاب ها در ساعتی غیر از آنچه انتظار دارید اجرا میشوند.
  • اعتبارسنجی گواهی SSL و توکن های زماندار ممکن است خطا بدهد.
  • همبستگی لاگ بین چند سرور عملا از بین میرود.
2

بررسی وضعیت فعلی

قبل از تغییر، وضعیت فعلی را ببینید. خروجی این دستور هم منطقه زمانی و هم وضعیت همگام سازی خودکار را نشان میدهد.

مشاهده وضعیت زمان
timedatectl
3

تغییر منطقه زمانی

برای پیدا کردن نام دقیق منطقه زمانی میتوانید در فهرست جستجو کنید. نام ها حساس به حروف بزرگ و کوچک هستند.

روی سیستم های قدیمی تر که systemd ندارند، ابزار گرافیکی dpkg-reconfigure همین کار را انجام میدهد.

جستجو در فهرست مناطق زمانی
timedatectl list-timezones | grep -i tehran
اعمال منطقه زمانی
sudo timedatectl set-timezone Asia/Tehran
روش جایگزین روی سیستم های قدیمی
sudo dpkg-reconfigure tzdata
4

همگام سازی خودکار ساعت

تنظیم منطقه زمانی به تنهایی کافی نیست؛ ساعت سیستم هم باید دقیق بماند. ساعت سرورهای مجازی به مرور دچار انحراف میشود و بدون همگام سازی، بعد از چند هفته اختلاف محسوسی پیدا میکند.

اگر به دقت بالاتر نیاز دارید یا سرور شما حساس به زمان است، chrony گزینه بهتری نسبت به سرویس پیشفرض است.

فعال سازی همگام سازی خودکار
sudo timedatectl set-ntp true
بررسی وضعیت همگام سازی
timedatectl show-timesync --all
نصب و بررسی chrony
sudo apt install chrony
chronyc tracking
chronyc sources
5

نکته مربوط به ایران: ساعت تابستانی حذف شده است

از سال ۱۴۰۱ تغییر ساعت تابستانی در ایران لغو شده و اختلاف زمانی در تمام سال ثابت است. اگر سرور شما قدیمی است و مدت هاست به روز رسانی نشده، ممکن است بسته اطلاعات مناطق زمانی هنوز قانون قدیمی را داشته باشد و در بازه هایی ساعت را نیم ساعت جابجا کند.

برای اطمینان، این بسته را به روز نگه دارید.

به روز رسانی اطلاعات مناطق زمانی
sudo apt update
sudo apt install --only-upgrade tzdata
6

ساعت برنامه ها جدا از ساعت سیستم است

این موردی است که وقت زیادی از افراد میگیرد. تغییر منطقه زمانی سیستم، لزوما روی پایگاه داده یا زبان برنامه نویسی شما اثر نمیگذارد. هر کدام تنظیم زمانی مستقل خودشان را دارند و باید جداگانه بررسی شوند.

کانتینرهای داکر هم منطقه زمانی خودشان را دارند و به صورت پیشفرض روی UTC هستند، حتی اگر سرور میزبان روی تهران تنظیم شده باشد.

بررسی منطقه زمانی در مای اس کیو ال
SELECT @@global.time_zone, @@session.time_zone;
تنظیم منطقه زمانی برای کانتینر داکر
docker run -e TZ=Asia/Tehran ...
  • در پی اچ پی مقدار date.timezone را در فایل php.ini بررسی کنید.
  • برای برنامه های نود جی اس متغیر محیطی TZ را تنظیم کنید.
  • ذخیره زمان در پایگاه داده را ترجیحا به صورت UTC انجام دهید و تبدیل را در لایه نمایش انجام دهید.

پرسش های پرتکرار

چرا با وجود تغییر منطقه زمانی سرور، زمان در برنامه من اشتباه است؟

پایگاه داده و زبان های برنامه نویسی تنظیم زمانی مستقل خودشان را دارند. مقدار time_zone در مای اس کیو ال و date.timezone در پی اچ پی را جداگانه بررسی کنید.

آیا ایران هنوز ساعت تابستانی دارد؟

خیر. از سال ۱۴۰۱ تغییر ساعت تابستانی لغو شده و اختلاف زمانی در تمام سال ثابت است. اگر سرور شما هنوز ساعت را جابجا میکند، بسته tzdata را به روز کنید.

چرا ساعت سرور مجازی به مرور جلو یا عقب میرود؟

انحراف ساعت در ماشین های مجازی طبیعی است. با فعال کردن همگام سازی خودکار یا نصب chrony این مشکل برطرف میشود.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه