تنظیم Time Zone در سیستم عامل ها

تطبیق منطقه زمانی سرور (Time Zone) با فعالیتهای نرمافزاری و دیتابیس، یکی از حیاتیترین اقدامات پس از راه اندازی زیرساخت است. در ادامه، روشهای عملیاتی برای پیکربندی دقیق زمان در توزیعهای محبوب لینوکس و ویندوز سرور را بررسی میکنیم.
Time Zone چیست؟
در دنیای شبکه، منطقه زمانی به ناحیهای جغرافیایی اطلاق میشود که از یک زمان استاندارد واحد برای اهداف قانونی و فنی استفاده میکند. اگر این پارامتر در سرور به درستی تنظیم نشود، ثبت لاگهای سیستم، اجرای کرونجابها و زمانبندی تراکنشها دچار اختلال جدی میشود.
برای سرورهایی که در ایران فعالیت میکنند، استفاده از Time Zone ایران (Asia/Tehran) الزامی است تا تمامی گزارشهای سیستمی با ساعت رسمی کشور مطابقت داشته باشد.
چگونه تایم زون را تنظیم کنیم؟ راهنمای لینوکس (Ubuntu و CentOS)
در توزیعهای مدرن لینوکس مانند اوبونتو و سنت او اس (نسخه ۷ به بالا)، ابزار قدرتمند timedatectl بهترین گزینه است. این ابزار به شما اجازه میدهد بدون ویرایش دستی فایلهای حساس، منطقه زمانی را مدیریت کنید.
- مشاهده وضعیت فعلی برای شروع: ابتدا با دستور زیر وضعیت فعلی زمان و منطقه زمانی سرور را بررسی کنید:
timedatectl
- یافتن منطقه زمانی صحیح: برای انتخاب منطقه زمانی ایران، میتوانید لیست را با کلمه Tehran فیلتر کنید تا نام دقیق آن را بیابید:
timedatectl list-timezones | grep Tehran
- اعمال تنظیمات جدید: پس از اطمینان از نام منطقه زمانی (Asia/Tehran)، با دستور زیر تغییرات را نهایی کنید:
timedatectl set-timezone Asia/Tehran
همگامسازی ساعت با آدرس NTP Server ایرانی
برای اینکه ساعت سرور شما همیشه دقیق باقی بماند، باید از پروتکل NTP استفاده کنید. این پروتکل ساعت سرور را با ساعتهای اتمی مرجع در شبکه همگام میکند. استفاده از آدرس NTP Server ایرانی به دلیل فاصله فیزیکی کمتر، دقت بسیار بالاتری را نسبت به سرورهای خارجی فراهم میکند.
سرور تنظیم ساعت ایران که به صورت عمومی در دسترس است، بهترین گزینه برای زیرساختهای داخلی است. میتوانید از آدرسهای زیر در فایل کانفیگ خود استفاده کنید:
- ir.pool.ntp.org
- 0.ir.pool.ntp.org
برای فعالسازی همگامسازی خودکار در لینوکس، دستور زیر را اجرا کنید:
timedatectl set-ntp yes
تنظیم منطقه زمانی در ویندوز سرور (Windows Server)
در ویندوز سرور، علاوه بر محیط گرافیکی، میتوانید از ابزار سریع sconfig استفاده کنید که در نسخههای Core و محیطهای متنی بسیار کاربردی است.
- استفاده از ابزار Sconfig: در محیط خط فرمان یا Run، دستور زیر را اجرا کنید:
sconfig.cmd
- در منوی باز شده، عدد مربوط به گزینه Date and Time (معمولا گزینه ۹) را وارد کنید.
- در پنجره باز شده روی دکمه Change time zone کلیک کنید.
- از لیست موجود، گزینه (UTC+03:30) Tehran را انتخاب کرده و تنظیمات را ذخیره کنید.
نکات کلیدی در مدیریت زمان سرور
- تنظیمدستیتاریخ: اگر به هر دلیلی نیاز به تنظیم دستی تاریخ در لینوکس دارید، از فرمت استاندارد سال-ماه-روز استفاده کنید:
timedatectl set-time 2024-05-20
- تنظیمدستیساعت: فرمت زمان در دستورات دستی باید به صورت ساعت:دقیقه:ثانیه باشد:
timedatectl set-time 14:30:00
- دسترسیلازم: به یاد داشته باشید که برای اجرای تمامی دستورات بالا در لینوکس، باید با کاربر Root وارد شده باشید یا از دستور
sudoدر ابتدای کدها استفاده کنید.
تفاوت کلیدی ساعت سختافزاری (RTC) و ساعت سیستم
یکی از مفاهیم چالشبرانگیز برای مدیران شبکه، درک تفاوت بین دو ساعت موجود در سرور است. ساعت سختافزاری که به آن RTC (Real Time Clock) یا BIOS Clock نیز میگویند، یک مدار الکترونیکی روی مادربورد است که حتی در صورت خاموش بودن سرور، با استفاده از باتری به کار خود ادامه میدهد.
در مقابل، ساعت سیستم (System Clock) توسط هسته سیستمعامل (Kernel) مدیریت میشود. در هنگام بوت شدن سرور، سیستمعامل زمان را از روی ساعت سختافزاری میخواند و از آن لحظه به بعد، خودش زمان را محاسبه میکند.
مدیریت ساعت سختافزاری در لینوکس
اگر ساعت سیستم شما دقیق است اما پس از ریبوت شدن سرور دوباره به هم میریزد، باید ساعت سختافزاری را با ساعت سیستم همگام کنید:
hwclock --systohc
همچنین برای مشاهده زمان ذخیره شده در بایوس سرور، از دستور زیر استفاده میشود:
hwclock --show
تحلیل عمیق پروتکل NTP و لایههای Stratum
پروتکل NTP (Network Time Protocol) صرفا یک ابزار ساده برای تنظیم ساعت نیست، بلکه یک سلسلهمراتب پیچیده برای تضمین دقت در حد میلیثانیه است. این پروتکل بر اساس مفهومی به نام Stratum کار میکند که نشاندهنده فاصله از منبع اصلی زمان (ساعت اتمی) است.
- Stratum 0: منابع اصلی زمان مثل ساعتهای اتمی، ساعتهای کوانتومی یا گیرندههای GPS هستند. این دستگاهها مستقیما به شبکه متصل نمیشوند.
- Stratum 1: سرورهایی هستند که مستقیما به دستگاههای Stratum 0 متصلاند. این سرورها دقیقترین منابع زمانی در شبکه اینترنت محسوب میشوند.
- Stratum 2: سرورهایی که زمان خود را از Stratum 1 دریافت میکنند و اکثر NTP Serverهای عمومی که ما استفاده میکنیم در این لایه قرار دارند.
در زیرساختهای هاستینگ، پیشنهاد میشود که سرورهای حساس خود را به چندین منبع در لایههای مختلف متصل کنید تا در صورت از دسترس خارج شدن یکی، پایداری زمان حفظ شود.
چالشهای تنظیم زمان در محیطهای مجازیسازی (VMware و KVM)
اگر از سرور مجازی استفاده میکنید، تنظیم زمان کمی پیچیدهتر است. در پلتفرمهایی مانند VMware یا داکر، ساعت سرور مجازی معمولا سعی میکند خودش را با ساعت سرور میزبان (Host) هماهنگ کند. این پدیده که به آن Time Drift گفته میشود، میتواند باعث شود ساعت سرور شما مدام چند ثانیه عقب یا جلو برود.
جلوگیری از تداخل در VMware
اگر روی سرور ابزارهای VMware Tools نصب است، ممکن است تنظیمات آن با سرویس NTP لینوکس تداخل پیدا کند. برای بررسی وضعیت همگامسازی با میزبان در لینوکس، از دستور زیر استفاده کنید:
vmware-toolbox-cmd timesync status
اگر قصد دارید مدیریت زمان کاملا در اختیار سیستمعامل مهمان باشد، باید همگامسازی با هاست را غیرفعال کنید تا NTP بتواند بدون تداخل کار کند.
مدیریت زمان در توزیعهای قدیمی (فایل /etc/localtime)
هرچند ابزار timedatectl در نسخههای جدید همه کارها را انجام میدهد، اما در نسخههای قدیمی لینوکس یا در شرایطی که سیستم به این ابزار دسترسی ندارد، باید از روش سنتی یعنی دستکاری Linkهای سیستمی استفاده کرد.
در لینوکس، تنظیمات منطقه زمانی در فایل /etc/localtime ذخیره میشود. این فایل در واقع یک لینک به دیتابیس مناطق زمانی در مسیر /usr/share/zoneinfo/ است. برای تنظیم دستی تایمزون ایران در نسخههای قدیمی، از دستورات زیر استفاده میشود:
rm -f /etc/localtime ln -s /usr/share/zoneinfo/Asia/Tehran /etc/localtime
ابزار Chrony؛ جایگزین مدرن برای سرویس NTP
در نسخههای جدید CentOS (نسخه ۸ به بالا) و RHEL، سرویس قدیمی ntpd جای خود را به chronyd داده است. Chrony برای سرورهایی که مدام خاموش و روشن میشوند یا به اینترنت پایدار دسترسی ندارند، بسیار بهینهتر عمل میکند.
نصب و راهاندازی Chrony
برای نصب این سرویس در اوبونتو یا دبیان:
apt install chrony
پس از نصب، برای مشاهده وضعیت همگامسازی و لیست سرورهای متصل، از دستور زیر استفاده کنید:
chronyc sources -v
این دستور به شما نشان میدهد که سرور شما دقیقا با چه ضریب خطایی (Offset) نسبت به مرجع اصلی در حال کار است.
عیبیابی و رفع مشکلات رایج در تنظیم ساعت
بسیاری از کاربران پس از اجرای دستورات، همچنان با مشکل عدم تغییر ساعت در اپلیکیشنهایی مثل PHP یا دیتابیس MySQL مواجه هستند. دلیل این امر آن است که برخی سرویسها، منطقه زمانی را در هنگام شروع به کار (Start) از سیستم میخوانند و در حافظه خود نگه میدارند.
- ریاستارت سرویسها: پس از تغییر Time Zone، حتما سرویسهایی مثل Apache، Nginx، MySQL و PHP-FPM را ریاستارت کنید.
- تنظیمات PHP: گاهی اوقات لازم است منطقه زمانی را مستقیما در فایل
php.iniنیز اصلاح کنید:date.timezone = "Asia/Tehran" - بررسی لاگها: اگر NTP کار نمیکند، پورت ۱۲۳ (UDP) را در فایروال چک کنید. این پورت مسیر اصلی تبادل پکتهای پروتکل زمان است.
اتوماسیون تنظیم زمان در ویندوز سرور با PowerShell
برای مدیران سروری که با تعداد زیادی سرور ویندوزی سر و کار دارند، استفاده از محیط گرافیکی منطقی نیست. شما میتوانید با استفاده از پاورشل، در چند ثانیه ساعت و NTP سرور را تنظیم کنید.
- تنظیم تایمزون با یک خط کد:
Set-TimeZone -Name "Iran Standard Time"
- اجبار ویندوز به همگامسازی فوری با سرور مرجع:
w32tm /resync
این دستورات به خصوص در هنگام پیکربندی اولیه سرورها (Post-Installation) باعث صرفهجویی زیادی در زمان میشوند.
سوالات متداول
این یکی از رایجترین چالشها در مدیریت سرور است. بسیاری از سرویسهای حساس مانند دیتابیسهای SQL یا مفسرهای زبان برنامهنویسی مانند PHP، تنظیمات منطقه زمانی را در لحظه استارت خوردن سرویس از سیستمعامل میخوانند. اگر پس از تغییر ساعت، این سرویسها را مجدداً راهاندازی نکنید، آنها همچنان با تنظیمات قبلی به فعالیت خود ادامه میدهند. همچنین در برخی موارد، تنظیمات داخلی خودِ نرمافزار (مثلاً در فایل پیکربندی وردپرس یا لاراول) بر تنظیمات سرور اولویت دارد و باید به صورت دستی اصلاح شود.
ساعت سختافزاری یک قطعه فیزیکی روی مادربورد سرور است که با باتری کار میکند و وظیفه نگهداری زمان در هنگام خاموش بودن دستگاه را دارد. ساعت سیستم اما توسط هسته سیستمعامل مدیریت میشود. در زمان بوت شدن، سیستمعامل زمان را از سختافزار میگیرد، اما از آن لحظه به بعد، ساعت نرمافزاری ملاک عمل است. اگر ساعت سیستم شما دقیق است اما بعد از ریبوت شدن به هم میریزد، یعنی همگامسازی بین این دو ساعت به درستی انجام نشده و ساعت سختافزاری نیاز به اصلاح دارد.
استفاده از سرورهای زمان نزدیک به موقعیت جغرافیایی سرور، باعث کاهش تاخیر شبکه (Network Latency) در تبادل پکتهای زمان میشود. هر چه فاصله فیزیکی تا سرور مرجع کمتر باشد، دقت همگامسازی بالاتر میرود. علاوه بر این، در مواقعی که اختلالات بینالمللی در شبکه اینترنت رخ میدهد، اتصال به مراجع داخلی قطع نمیشود و پایداری زمان سرور حفظ میگردد.
بله، در سرورهای مجازی، لایهای به نام هایپروایزر (Hypervisor) وجود دارد که ساعت فیزیکی سرور میزبان را مدیریت میکند. در برخی تکنولوژیهای مجازیسازی مانند VMware یا OpenVZ، ساعت سرور مجازی مدام سعی میکند خود را با ساعت سرور اصلی هماهنگ کند. اگر شما ساعت را تغییر دهید و بعد از مدتی دوباره به حالت قبل برگردد، احتمالاً تداخلی بین سرویس NTP داخلی شما و تنظیمات همگامسازیِ پنل مجازیساز وجود دارد که باید از سمت مدیریت زیرساخت بررسی شود.
هرچند این مورد بیشتر یک بحث فنی در لایه شبکه است، اما جالب است بدانید که پکتهای NTP بسیار کوچک هستند و نباید دچار شکستگی یا فرگمنتیشن شوند. اگر در مسیر انتقال این پکتها، تجهیزات شبکه باعث تکهتکه شدن آنها شوند، دقت زمان به شدت افت میکند. به همین دلیل پروتکل زمان به گونهای طراحی شده که کمترین بار را روی پهنای باند داشته باشد تا در سریعترین زمان ممکن به مقصد برسد.
این مشکل معمولاً مربوط به تنظیمات Daylight Saving Time یا همان تغییر ساعت تابستانی است. اگر سیستمعامل شما آپدیت نباشد یا قوانین تغییر ساعت رسمی کشور تغییر کرده باشد (مانند ایران که تغییر ساعت تابستانی در آن لغو شد)، ویندوز طبق الگوهای قدیمی ساعت را جابهجا میکند. در این شرایط باید گزینه مربوط به تنظیم خودکار ساعت تابستانی را در تنظیمات تاریخ و زمان غیرفعال کنید.




























شما میتوانید دیدگاه خود را در مورد این مطلب با ما با اشتراک بگذارید.