CHRONYD(8) System Administration CHRONYD(8)

chronyd - دیمن سرویس همگام‌سازی زمان chrony

chronyd [گزینه]... [دستورالعمل]...

دستور chronyd یک دیمن برای همگام‌سازی ساعت سیستم است. این برنامه می‌تواند ساعت را با کارسازهای NTP، ساعت‌های مرجع (مانند گیرنده GPS) و ورودی‌های دستی از طریق ساعت مچی و صفحه‌کلید به‌وسیلهٔ chronyc همگام‌سازی کند. همچنین می‌تواند به‌عنوان یک کارساز و همتا (peer) در پروتکل NTPv4 (استاندارد RFC 5905) عمل کرده و خدمات زمانی را به سایر رایانه‌های موجود در شبکه ارائه دهد.

اگر هیچ دستورالعمل پیکربندی در خط فرمان مشخص نشود، chronyd آن‌ها را از یک پروندهٔ پیکربندی می‌خواند. مسیر پیش‌فرض کامپایل‌شده برای این پرونده /etc/chrony.conf است.

پیام‌های اطلاع‌رسانی، هشدارها و خطاها در syslog ثبت خواهند شد.

-4

با این گزینه، نام‌های میزبان تنها به نشانی‌های IPv4 تفکیک می‌شوند و فقط سوکت‌های IPv4 ایجاد خواهند شد.

-6

با این گزینه، نام‌های میزبان تنها به نشانی‌های IPv6 تفکیک می‌شوند و فقط سوکت‌های IPv6 ایجاد خواهند شد.

-f پرونده

از این گزینه می‌توان برای تعیین یک مسیر جایگزین جهت پروندهٔ پیکربندی استفاده کرد. مقدار پیش‌فرض کامپایل‌شده /etc/chrony.conf است.

-n

هنگام اجرا در این حالت، برنامه خود را از ترمینال جدا نمی‌کند (در پیش‌زمینه باقی می‌ماند).

-d

هنگام اجرا در این حالت، برنامه خود را از ترمینال جدا نمی‌کند و همهٔ پیام‌ها به‌جای syslog در ترمینال نوشته می‌شوند. اگر chronyd با پشتیبانی از اشکال‌زدایی کامپایل شده باشد، می‌توان از این گزینه دو بار برای فعال‌سازی پیام‌های اشکال‌زدایی استفاده کرد.

-l پرونده

این گزینه نوشتن پیام‌های گزارش را به‌جای syslog یا ترمینال، در یک پرونده فعال می‌کند.

-L سطح

این گزینه حداقل سطح اهمیت پیام‌هایی را که باید در پروندهٔ گزارش، syslog یا ترمینال نوشته شوند مشخص می‌کند. سطوح زیر قابل تعیین هستند: -1 (اشکال‌زدایی، در صورت کامپایل با پشتیبانی از اشکال‌زدایی)، 0 (اطلاع‌رسانی)، 1 (هشدار)، 2 (خطای غیرمهلک) و 3 (خطای مهلک). مقدار پیش‌فرض 0 است.

-p

هنگام اجرا در این حالت، chronyd پیکربندی را چاپ کرده و خارج می‌شود. این دستور خود را از ترمینال جدا نخواهد کرد. از این گزینه می‌توان برای بررسی نحو (سینتکس) پیکربندی و دریافت کل پیکربندی استفاده کرد، حتی اگر در چندین پرونده تقسیم شده باشد و با دستورالعمل‌های include یا confdir خوانده شود.

-q

هنگام اجرا در این حالت، chronyd ساعت سیستم را یک‌بار تنظیم کرده و خارج می‌شود. این برنامه از ترمینال جدا نخواهد شد.

-Q

این گزینه مشابه گزینهٔ -q است، با این تفاوت که فقط انحراف زمانی (offset) را بدون اعمال هیچ‌گونه اصلاحی بر روی ساعت چاپ می‌کند و درگاه‌های کارساز را غیرفعال می‌سازد تا اجازه دهد chronyd بدون مجوزهای ریشه (root) اجرا شود، به این شرط که پیکربندی فاقد دستورالعمل‌هایی باشد که به چنین مجوزهایی نیاز دارند (مانند refclock، hwtimestamp، rtcfile و غیره).

-r

این گزینه تلاش می‌کند پرونده‌های حاوی تاریخچهٔ نمونه‌ها را برای هر یک از کارسازها و ساعت‌های مرجع مورد استفاده، دوباره بارگذاری کرده و سپس حذف کند. انتظار می‌رود این پرونده‌ها در پوشه‌ای قرار داشته باشند که توسط دستورالعمل dumpdir در پروندهٔ پیکربندی مشخص شده است. این گزینه زمانی مفید است که می‌خواهید به هر دلیلی، مثلاً برای نصب نسخهٔ جدید، chronyd را برای مدت کوتاهی متوقف کرده و مجدداً راه‌اندازی کنید. با این حال، این گزینه تنها باید در سیستم‌هایی استفاده شود که هسته می‌تواند جبران‌سازی ساعت را در زمانی که تحت کنترل chronyd نیست حفظ کند (یعنی لینوکس، FreeBSD، NetBSD، illumos و macOS نسخهٔ 10.13 یا بالاتر).

-R

هنگامی که از این گزینه استفاده شود، دستورالعمل initstepslew و دستورالعمل makestep که با یک حد مثبت به کار رفته است نادیده گرفته خواهند شد. این گزینه هنگام راه‌اندازی مجدد chronyd مفید است و می‌تواند همراه با گزینهٔ -r استفاده شود.

-s

این گزینه ساعت سیستم را از ساعت بلادرنگ سخت‌افزاری رایانه (RTC) یا بر اساس آخرین زمان تغییر پروندهٔ مشخص‌شده توسط دستورالعمل driftfile تنظیم می‌کند. ساعت‌های سخت‌افزاری (RTC) تنها در لینوکس پشتیبانی می‌شوند.

در صورت استفاده همراه با گزینهٔ -r، برنامهٔ chronyd پس از تنظیم ساعت سیستم از روی RTC تلاش می‌کند تا نمونه‌های قدیمی را حفظ کند. از این ویژگی می‌توان استفاده کرد تا به chronyd امکان داده شود میانگین‌گیری بلندمدت نرخ افزایش یا کاهش زمان را در طول راه‌اندازی‌های مجدد سیستم محاسبه کند؛ این قابلیت برای سیستم‌هایی با دسترسی ناپیوسته به شبکه که در صورت عدم استفاده خاموش می‌شوند مفید است. برای کارکرد مناسب، این ویژگی نیازمند آن است که chronyd در آخرین باری که رایانه روشن بوده، آمار دقیقی از اختلاف بین RTC و ساعت سیستم ثبت کرده باشد.

اگر آخرین زمان تغییر پروندهٔ drift دیرتر از زمان جاری سیستم و زمان RTC باشد، زمان سیستم روی آن تنظیم می‌شود تا زمانی که chronyd قبلاً در آن متوقف شده بود بازیابی شود. این قابلیت در رایانه‌هایی که فاقد RTC هستند یا RTC آن‌ها خراب است (برای نمونه باتری آن تمام شده) مفید واقع می‌شود.

-t مهلت‌زمانی

این گزینه یک مهلت‌زمانی (به ثانیه) تنظیم می‌کند که پس از آن chronyd خارج خواهد شد. اگر ساعت همگام نشده باشد، با یک وضعیت غیرصفر خارج می‌شود. این ویژگی در ترکیب با گزینهٔ -q یا -Q برای کوتاه کردن حداکثر زمان انتظار برای اندازه‌گیری‌ها، یا با گزینهٔ -r برای محدود کردن مدت‌زمان اجرای chronyd مفید است در حالی که همچنان به آن اجازه می‌دهد فرکانس ساعت سیستم را تنظیم کند.

-u کاربر

این گزینه نام کاربر سیستمی را مشخص می‌کند که chronyd پس از راه‌اندازی برای رها کردن دسترسی‌های ریشه (root) به آن تغییر هویت می‌دهد. این گزینه بر دستورالعمل user اولویت دارد. مقدار پیش‌فرض کامپایل‌شده chrony است.

در لینوکس، chronyd باید با پشتیبانی از کتابخانهٔ libcap کامپایل شده باشد. در macOS، FreeBSD، NetBSD و illumos برنامهٔ chronyd به دو فرآیند منشعب (fork) می‌شود. فرآیند فرزند امتیازات ریشه را حفظ می‌کند، اما تنها می‌تواند دامنهٔ بسیار محدودی از فراخوان‌های سیستمی ممتاز را به نمایندگی از والد انجام دهد.

-U

این گزینه بررسی دسترسی‌های ریشه را غیرفعال می‌کند تا به chronyd اجازه دهد تحت یک کاربر غیرریشه اجرا شود، با این فرض که فرآیند تمام قابلیت‌های لازم (capabilities، مثلاً فراهم‌شده توسط مدیر سرویس) و دسترسی به تمام پرونده‌ها، پوشه‌ها و دستگاه‌های مورد نیاز برای عملکرد صحیح در پیکربندی مشخص‌شده را دارا است. توجه داشته باشید که در پیکربندی‌های مختلف و نسخه‌های گوناگون هستهٔ لینوکس ممکن است به قابلیت‌های متفاوتی نیاز باشد. راه‌اندازی chronyd با کاربری غیر از ریشه در شرایطی که پیکربندی شناخته‌شده نیست یا حداقل به دستورالعمل‌های خاصی محدود نشده است، توصیه نمی‌شود.

-F سطح

این گزینه فیلترهای فراخوان سیستم را که توسط فرآیندهای chronyd بارگذاری می‌شوند، در صورتی که با پشتیبانی از سازوکار رایانش امن لینوکس (seccomp) کامپایل شده باشد، پیکربندی می‌کند. سه سطح تعریف شده است: 0، 1 و 2. فیلترها در سطح 0 غیرفعال هستند. در سطوح 1 و 2، اگر chronyd فراخوان سیستمی انجام دهد که توسط فیلترها مسدود شده است، فرآیند متوقف خواهد شد (kill می‌شود). این سطح می‌تواند به‌صورت یک عدد منفی تعیین شود تا به‌جای سیگنال SIGKILL سیگنال SIGSYS فعال گردد، که برای اشکال‌زدایی مفید است. مقدار پیش‌فرض 0 است.

در سطح 1، فیلترها تنها به فراخوان‌های سیستمی برگزیده‌ای اجازه می‌دهند که انتظار می‌رود به‌طور معمول توسط chronyd اجرا شوند. سایر فراخوان‌های سیستمی مسدود می‌شوند. این سطح تنها در صورتی توصیه می‌شود که عملکرد آن بر روی نسخهٔ سیستم محل نصب chrony تأیید شده باشد. این فیلترها باید به فراخوان‌های سیستمی انجام‌شده توسط کتابخانه‌های مورد استفادهٔ chronyd (مانند libc) نیز اجازهٔ اجرا بدهند، اما نسخه‌ها یا پیاده‌سازی‌های مختلف کتابخانه‌ها ممکن است فراخوان‌های متفاوتی انجام دهند. در صورتی که فیلترها فراخوانی سیستمی را نادیده گرفته باشند، ممکن است chronyd حتی در شرایط عادی کارکرد متوقف شود.

در سطح 2، فیلترها تنها تعداد محدودی از فراخوان‌های سیستمی خاص (مانند fork و exec) را مسدود می‌کنند. این رویکرد از تشخیص‌های مثبت کاذب (false positive) جلوگیری می‌کند، اما حفاظت از سیستم در برابر یک فرآیند دست‌کاری‌شده یا آسیب‌دیدهٔ chronyd بسیار محدودتر خواهد بود.

این فیلترها را نمی‌توان در صورت استفاده از دستورالعمل mailonchange فعال کرد.

-P اولویت

در لینوکس، FreeBSD، NetBSD و illumos این گزینه زمان‌بند بلادرنگ SCHED_FIFO را در اولویت مشخص‌شده (که باید عددی بین 0 تا 100 باشد) انتخاب می‌کند. در macOS، این گزینه باید مقداری برابر با 0 (برای غیرفعال کردن خط‌مشی محدودیت زمانی ریسه) یا 1 (برای فعال‌سازی این خط‌مشی) داشته باشد. سایر سیستم‌ها از این گزینه پشتیبانی نمی‌کنند. مقدار پیش‌فرض 0 است.

-m

این گزینه برنامهٔ chronyd را در حافظهٔ رم قفل می‌کند تا هرگز به حافظهٔ جانبی (صفحه‌بندی/swap) منتقل نشود. این حالت تنها در لینوکس، FreeBSD، NetBSD و illumos پشتیبانی می‌شود.

-x

این گزینه کنترل ساعت سیستم را غیرفعال می‌کند. برنامهٔ chronyd تلاشی برای اعمال تغییرات بر روی ساعت نخواهد کرد. با این فرض که ساعت سیستم آزادانه کار می‌کند، همچنان انحراف زمانی و فرکانس آن را نسبت به زمان واقعی تخمینی ردیابی می‌کند. این گزینه امکان راه‌اندازی chronyd را بدون داشتن قابلیت تنظیم ساعت سیستم (برای نمونه در برخی از کانتینرها) جهت کار به‌عنوان یک کارساز NTP فراهم می‌سازد.

-v, --version

با این گزینه، chronyd شمارهٔ نسخه را در ترمینال چاپ کرده و خارج می‌شود.

-h, --help

با این گزینه، chronyd پیام راهنما را در ترمینال چاپ کرده و خارج می‌شود.

LISTEN_FDS

در سیستم‌های لینوکسی، مدیر سرویس systemd ممکن است توصیف‌گرهای پرونده (file descriptors) مربوط به سوکت‌های از پیش راه‌اندازی‌شده را به chronyd منتقل کند. مدیر سرویس توصیف‌گرهای پرونده را تخصیص داده و متصل (bind) می‌کند و یک رونوشت از آن را به هر نمونهٔ ایجادشده از سرویس تحویل می‌دهد. این سازوکار امکان راه‌اندازی مجدد بدون وقفه (zero-downtime) سرویس را فراهم می‌آورد، زیرا سوکت‌ها درخواست‌های کلاینت را تا زمانی که سرویس قادر به پردازش آن‌ها باشد در بافر نگه می‌دارند. مدیر سرویس متغیر محیطی LISTEN_FDS را روی تعداد توصیف‌گرهای پروندهٔ منتقل‌شده تنظیم می‌کند.

NOTIFY_SOCKET

مدیر سرویس systemd این متغیر را برای سرویس‌هایی از نوع notify مقداردهی می‌کند. زمانی که chronyd به‌طور کامل راه‌اندازی شده و آمادهٔ پذیرش دستورات (برای نمونه از سوی chronyc) باشد، پیامی به این سوکت ارسال می‌کند؛ در صورتی که از گزینهٔ -s یا دستورالعمل initstepslew استفاده شده باشد، ساعت نیز از قبل تنظیم شده است. این سازوکار جایگزینی برای سرویس‌های نوع forking است که نیازی به پروندهٔ شناسه فرآیند (PID file) ندارد. برای جلوگیری از انشعاب (fork)، برنامهٔ chronyd باید با گزینهٔ -n یا -d اجرا شود.

/etc/chrony.conf

chronyc(1), chrony.conf(5)

جهت دریافت دستورالعمل‌های مربوط به گزارش اشکالات، لطفاً به نشانی زیر مراجعه کنید: https://chrony-project.org.

پروژهٔ chrony توسط ریچارد کورنو (Richard Curnow)، میروسلاو لیچوار (Miroslav Lichvar) و دیگران نوشته شده است.

2026-04-30 chrony 4.8