آموزش سرور

تنظیم hostname، منطقهٔ زمانی و همگام‌سازی ساعت در سرور لینوکس

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۶ دقیقه

root@server: ~$ timedatectl Local time: Sat 2026-10-3 Universal time: Sat 2026-10-3 Time zone: Asia/Tehran (System clock synchronized: yes NTP service: activehostnameآموزش سرورتنظیم hostname، منطقهٔزمانی و همگام‌سازیساعت در سرور لینوکسمجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

پس از تحویل سرور جدید، با hostnamectl set-hostname یک نام معنادار بگذارید و آن را در /etc/hosts هم ثبت کنید. با timedatectl set-timezone منطقهٔ زمانی را تعیین کنید؛ برای سرورهای چندکاربره UTC انتخاب امن‌تری است. مطمئن شوید همگام‌سازی ساعت فعال است و System clock synchronized مقدار yes دارد. ساعت نادرست باعث خطای گواهی SSL، شکست احراز هویت دومرحله‌ای، اجرای اشتباه کرون‌جاب‌ها و لاگ‌های گمراه‌کننده می‌شود.

چرا این تنظیمات ساده مهم‌اند؟

نام سرور، منطقهٔ زمانی و ساعت دقیق در نگاه اول جزئیات کم‌اهمیتی به نظر می‌رسند، اما هر کدام در جاهای غیرمنتظره اثر می‌گذارند:

  • hostname در خط فرمان، لاگ‌ها، ایمیل‌های سیستمی و ابزارهای مانیتورینگ نمایش داده می‌شود. وقتی چند سرور دارید، نامی مثل ubuntu-s-1vcpu هیچ کمکی به تشخیص اینکه روی کدام سرور هستید نمی‌کند و دستور اشتباه روی سرور اشتباه یکی از رایج‌ترین خطاهای مدیریتی است.
  • منطقهٔ زمانی تعیین می‌کند زمان‌ها در لاگ‌ها و کرون‌جاب‌ها به وقت کجا خوانده شوند.
  • ساعت دقیق پایهٔ امنیت است: گواهی‌های SSL، کدهای احراز هویت دومرحله‌ای، توکن‌های ورود و امضاهای API همه به ساعت درست وابسته‌اند.

این سه تنظیم بخشی از کارهای اولیهٔ هر سرور جدید هستند که در چک‌لیست امنیت سرور جدید هم آمده‌اند.

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

تنظیم hostname

وضعیت فعلی را ببینید:

hostnamectl

یک نام کوتاه و معنادار انتخاب کنید که نقش سرور را نشان دهد؛ مثلاً web-1، db-main یا shop-prod. فقط از حروف کوچک انگلیسی، عدد و خط تیره استفاده کنید:

sudo hostnamectl set-hostname web-1

سپس نام جدید را در فایل /etc/hosts هم ثبت کنید تا برنامه‌هایی که نام سرور را به آدرس ترجمه می‌کنند دچار تأخیر یا خطا نشوند. خطی شبیه این را اضافه یا اصلاح کنید:

127.0.1.1   web-1

اگر این خط نباشد، دستور sudo ممکن است پیام unable to resolve host بدهد و چند ثانیه مکث کند. پس از تغییر، از SSH خارج و دوباره وارد شوید تا نام جدید در خط فرمان دیده شود.

در برخی سرورهای ابری، ابزار cloud-init در هر بوت hostname را به مقدار پنل برمی‌گرداند. اگر پس از ریبوت نام قبلی برگشت، در فایل /etc/cloud/cloud.cfg مقدار preserve_hostname: true را تنظیم کنید.

hostname و FQDN

اگر سرور قرار است ایمیل ارسال کند، بهتر است یک نام کامل دامنه‌دار یا FQDN مثل web-1.example.com داشته باشد که رکورد DNS آن هم به آی‌پی سرور اشاره کند. سرورهای ایمیل گیرنده این نام را بررسی می‌کنند و ناهماهنگی آن با آی‌پی، احتمال رفتن ایمیل به اسپم را بیشتر می‌کند. رکوردهای لازم در راهنمای رکوردهای DNS آمده است.

تنظیم منطقهٔ زمانی

وضعیت ساعت و منطقهٔ زمانی را ببینید:

timedatectl

فهرست مناطق زمانی موجود:

timedatectl list-timezones | grep -i asia

و تنظیم:

sudo timedatectl set-timezone Asia/Tehran

UTC یا وقت محلی؟

دو رویکرد رایج وجود دارد:

  • UTC: بسیاری از مدیران سیستم همهٔ سرورها را روی UTC نگه می‌دارند. مزیت: لاگ سرورهای مختلف در کشورهای مختلف مستقیم قابل‌مقایسه‌اند، تغییرات ساعت تابستانی هیچ اثری ندارد و ابهام در زمان‌ها پیش نمی‌آید.
  • وقت محلی: اگر همهٔ کاربران و تیم در یک منطقهٔ زمانی هستند و سرور فقط یکی است، خواندن لاگ‌ها و تنظیم کرون‌جاب‌ها به وقت محلی راحت‌تر است.

هر کدام را انتخاب می‌کنید، در همهٔ سرورها یکسان باشد. برنامه‌های شما هم بهتر است زمان‌ها را در دیتابیس به UTC ذخیره کنند و فقط هنگام نمایش به وقت کاربر تبدیل کنند.

UTC یا وقت محلی
UTC
  • لاگ سرورهای مختلف مستقیم قابل‌مقایسه
  • بدون اثر ساعت تابستانی
  • استاندارد رایج در تیم‌های بزرگ
  • نیاز به تبدیل ذهنی هنگام خواندن
در برابر
وقت محلی
  • خواندن لاگ و زمان‌بندی راحت‌تر
  • مناسب یک سرور و تیم در یک منطقه
  • ابهام هنگام مقایسه با سرورهای دیگر
  • کرون‌جاب‌ها به وقت محلی اجرا می‌شوند
شکل ۲ مهم‌تر از انتخاب، یکسان بودن تنظیم در همهٔ سرورهاست.

اثر منطقهٔ زمانی روی کرون‌جاب‌ها

cron زمان‌ها را بر اساس منطقهٔ زمانی سیستم تفسیر می‌کند. اگر کرون‌جابی را برای ساعت سه بامداد تنظیم کرده‌اید و بعد منطقهٔ زمانی را از UTC به تهران تغییر می‌دهید، آن کار از این پس ساعت سه بامداد به وقت تهران اجرا می‌شود. پس از تغییر منطقهٔ زمانی، سرویس cron را راه‌اندازی مجدد کنید و زمان‌بندی‌ها را دوباره بررسی کنید. جزئیات زمان‌بندی در آموزش Cron آمده است.

همگام‌سازی ساعت

ساعت سخت‌افزاری هر سیستم کمی جلو یا عقب می‌رود و در سرورهای مجازی این انحراف می‌تواند بیشتر باشد. پروتکل NTP ساعت سیستم را به‌طور منظم با سرورهای زمان دقیق در اینترنت هماهنگ می‌کند. در خروجی timedatectl دو خط مهم است:

System clock synchronized: yes
              NTP service: active

اگر هر دو مقدار درست بودند، کاری لازم نیست. اگر نه، سرویس همگام‌سازی پیش‌فرض اوبونتو را فعال کنید:

sudo timedatectl set-ntp true
systemctl status systemd-timesyncd

chrony برای دقت بیشتر

systemd-timesyncd برای بیشتر سرورها کافی است. اما اگر به دقت بیشتر نیاز دارید، مثلاً برای دیتابیس‌های توزیع‌شده، یا ساعت سرور مجازی شما زیاد منحرف می‌شود، chrony گزینهٔ قوی‌تری است و با نصب آن، timesyncd خودکار کنار گذاشته می‌شود:

sudo apt install -y chrony
chronyc tracking
chronyc sources

اگر سرور به سرورهای NTP عمومی اینترنت دسترسی ندارد، مثلاً در شبکهٔ محدود یا هنگام اختلال ارتباط بین‌الملل، باید یک سرور زمان داخلی را در تنظیمات معرفی کنید؛ بسیاری از دیتاسنترها سرور NTP اختصاصی برای مشتریان خود دارند. ارتباط NTP از پورت UDP شمارهٔ ۱۲۳ انجام می‌شود و این پورت در جهت خروجی نباید مسدود باشد.

root@web-1: ~
$ timedatectl               Local time: Sat 2026-10-31 18:40:12 +0330           Universal time: Sat 2026-10-31 15:10:12 UTC                Time zone: Asia/Tehran (+0330, +0330)System clock synchronized: yes              NTP service: active$ 
شکل ۳ همگام‌سازی فعال است و ساعت سیستم با سرورهای زمان هماهنگ است.

منطقهٔ زمانی در داکر و برنامه‌ها

یک نکته که زیاد غافلگیرکننده است: کانتینرهای داکر منطقهٔ زمانی سرور را به ارث نمی‌برند و معمولاً روی UTC اجرا می‌شوند. بنابراین ممکن است سرور روی وقت تهران باشد اما لاگ‌های برنامهٔ داخل کانتینر به وقت UTC ثبت شوند. اگر می‌خواهید کانتینر هم وقت محلی داشته باشد، متغیر محیطی TZ=Asia/Tehran را در فایل Compose به سرویس بدهید؛ بیشتر imageهای رایج از آن پشتیبانی می‌کنند. ساعت خود کانتینرها اما همیشه همان ساعت سرور است، چون همه از یک هسته استفاده می‌کنند؛ پس همگام‌سازی فقط روی سرور لازم است.

زبان‌های برنامه‌نویسی و دیتابیس‌ها هم تنظیم منطقهٔ زمانی جداگانه دارند. مثلاً PHP در فایل تنظیمات خود، PostgreSQL و MySQL در پیکربندی سرور و جلسه، و فریم‌ورک‌ها در فایل تنظیمات برنامه. برای جلوگیری از سردرگمی، یک قاعدهٔ ساده را رعایت کنید: ذخیره به UTC، نمایش به وقت کاربر، و ثبت منطقهٔ زمانی در هر جایی که زمان را به‌صورت متن ذخیره می‌کنید.

مشکلات رایج ناشی از ساعت نادرست

  • خطای گواهی SSL: اگر ساعت سرور عقب باشد، گواهی‌های معتبر سرویس‌های دیگر هنوز «نامعتبر» دیده می‌شوند و دستوراتی مثل apt update یا curl با خطای گواهی شکست می‌خورند. مفهوم اعتبار گواهی در مقالهٔ SSL و HTTPS آمده است.
  • شکست احراز هویت دومرحله‌ای: کدهای یک‌بارمصرف بر اساس زمان ساخته می‌شوند و اختلاف چنددقیقه‌ای باعث رد شدن کد درست می‌شود.
  • اجرای کرون‌جاب در زمان اشتباه و پشتیبان‌گیری که هم‌زمان با ساعت شلوغ سایت اجرا می‌شود.
  • لاگ‌های گمراه‌کننده: مقایسهٔ لاگ دو سرور با ساعت‌های متفاوت، ترتیب رویدادها را به هم می‌ریزد و عیب‌یابی را بسیار سخت می‌کند.
  • خطای امضای API: بسیاری از سرویس‌ها درخواست‌هایی را که زمانشان بیش از چند دقیقه با ساعت سرور مقصد اختلاف دارد، رد می‌کنند.

اگر ساعت سرور اختلاف زیادی دارد، پس از فعال کردن همگام‌سازی چند لحظه صبر کنید و دوباره timedatectl را بررسی کنید. chrony اختلاف‌های بزرگ را در شروع به‌صورت یک‌جا اصلاح می‌کند، اما در حین کار ساعت را به‌تدریج تنظیم می‌کند تا برنامه‌ها دچار پرش زمانی نشوند.

سؤالات متداول

آیا تغییر hostname به ریبوت نیاز دارد؟

خیر. hostnamectl نام را فوراً تغییر می‌دهد. فقط برای دیدن نام جدید در خط فرمان، از SSH خارج و دوباره وارد شوید و فایل /etc/hosts را هم به‌روز کنید.

منطقهٔ زمانی سرور را روی تهران بگذارم یا UTC؟

اگر یک سرور دارید و همهٔ کاربرانتان در ایران‌اند، تهران راحت‌تر است. اگر چند سرور در کشورهای مختلف دارید یا می‌خواهید از دردسرهای تبدیل زمان دور باشید، UTC انتخاب امن‌تری است.

System clock synchronized مقدار no دارد؛ چه کنم؟

با timedatectl set-ntp true همگام‌سازی را فعال کنید و وضعیت systemd-timesyncd یا chrony را ببینید. اگر سرور به سرورهای NTP بیرونی دسترسی ندارد، بررسی کنید پورت UDP شمارهٔ ۱۲۳ در جهت خروجی باز باشد یا یک سرور زمان داخلی تنظیم کنید.

چرا apt update خطای گواهی می‌دهد در حالی که اینترنت وصل است؟

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

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.