سؤال كيفية فرض تحديث على مدار الساعة باستخدام NTP؟


أنا أدير أوبونتو على نظام مدمج يستند إلى أرمينيا التي تفتقر إلى بطارية RTC المدعومة. وقت الاستيقاظ في مكان ما خلال عام 1970. وهكذا ، يمكنني استخدام خدمة NTP لتحديث الوقت إلى الوقت الحالي.

أضفت السطر التالي إلى /etc/rc.local ملف:

sudo ntpdate -s time.nist.gov

ومع ذلك ، بعد بدء التشغيل ، لا يزال يستغرق بضع دقائق حتى يتم تحديث الوقت ، وخلال هذه الفترة لا أستطيع العمل بفعالية مع tar و make.

كيف يمكنني فرض تحديث الساعة في أي وقت؟


تحديث 1: ما يلي (بفضل Eric و Stephan) يعمل بشكل جيد من سطر الأوامر ، ولكنه يفشل في تحديث الساعة عند وضعها /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ] 
 * Starting NTP server          [ OK ] 
Thu Feb 14 18:52:21 UTC 2013

ما الخطأ الذي افعله؟


تحديث 2: حاولت اتباع الاقتراحات القليلة التي جاءت ردا على التحديث الأول ، ولكن لا شيء يبدو فعلا للقيام بهذه المهمة على النحو المطلوب. إليك ما حاولت فعله:

  1. استبدال الخادم ل us.pool.ntp.org
  2. استخدم مسارات واضحة للبرامج
  3. مسح ال ntp خدمة تماما وترك فقط sudo ntpdate ... في rc.local
  4. مسح ال sudo من الأمر أعلاه في rc.local

باستخدام ما ورد أعلاه ، لا يزال الجهاز يبدأ في 1970. ومع ذلك ، عند القيام بذلك من سطر الأوامر بمجرد تسجيل الدخول (عبر ssh) ، يتم تحديث الساعة بمجرد استدعائي ntpdate.

آخر شيء فعلته هو إزالة هذا من rc.local ووضع دعوة ل ntpdate في .bashrc ملف. هذا يقوم بتحديث الساعة كما هو متوقع ، وأحصل على الوقت الحالي الحقيقي بمجرد توفر موجه الأوامر.

ومع ذلك، هذا يعني أنه إذا تم تشغيل الجهاز ولم يتم تسجيل أي مستخدم ، فلن يحصل التحديث على أي وقت. أستطيع ، بالطبع ، إعادة تثبيت ntp خدمة على الأقل يتم تحديث الساعة في غضون بضع دقائق من بدء التشغيل ، ولكن بعد ذلك عدنا في مربع 1.

لذا ، هل هناك سبب لماذا وضع ntpdate الأمر في rc.local لا يقوم بالمهمة المطلوبة ، أثناء القيام بذلك .bashrc يعمل بشكل جيد؟


325
2018-02-13 21:58


الأصل


من [هنا] [1]: ntpdate -s ntp.ubuntu.com     [1]: askubuntu.com/a/81301/130162 - 18446744073709551615
لاحظ العلم '-b' على ntpdate. من صفحة man الخاص ntpdate: "فرض الوقت ليتم stepped باستخدام استدعاء النظام settimeofday () ، بدلاً من slewed (افتراضي) باستخدام استدعاء النظام adjtime (). يجب استخدام هذا الخيار عند استدعاء من ملف بدء تشغيل في وقت التمهيد." العديد من الإجابات أدناه لا تشمله ، وربما جزء من المشكلة في جعل الأشياء تعمل. ضع في اعتبارك أن علامة "-B" تشير إلى أن الإزاحة التي تزيد عن 128 مللي ثانية يمكن أن تستغرق ساعات للمزامنة باستخدام الآلية "slew" الافتراضية - Matt S.
ليست هناك حاجة للاستخدام sudo في ملفات /etc/rc.locale .. يتم تشغيلها allready كجذر. - Soren A


الأجوبة:


على الارجح ntp الخدمة قيد التشغيل ، لهذا السبب ntpdate لا يمكن فتح المقبس (المنفذ 123 UDP) والاتصال بخادم NTP.

جرب من سطر الأوامر:

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

إذا كنت ترغب في وضع هذا في /etc/rc.local استخدم ما يلي:

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&

285
2018-02-13 23:13



شكر. هل يمكنك أن تشرح لماذا تحتاج إلى مسارات صريحة؟ - ysap
أنا لا أعرف حقا. :-) لقد واجهت مشكلة بمجرد محاولة تشغيل service من rc.local و cron لكنني تمكنت من إصلاحه باستخدام /etc/init.d/xxx بدلا من ذلك. في الواقع أعتقد أنك لست مضطرا لإعطاء الطريق الكامل ل ntpdate، أود أن استخدام المسارات الكاملة في البرامج النصية فقط للتأكد من العثور على الملف الصحيح. - Eric Carvalho
حسنا ، هذه كانت المشكلة على ما يبدو. الآن يتم تحديث الساعة بمجرد تأسيس اتصال الشبكة. شكر. - ysap
لقد وجدت أن us.pool.ntp.org أكثر استجابة. - ysap
مع ال -u الخيار ، لا تحتاج إلى إيقاف خدمة ntp: sudo ntpdate -u time.nist.gov - Edward Anderson


بدلا من ntpdate (وهو إهمال)، استعمال

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

ال -gq يخبر ntp daemon بتصحيح الوقت بغض النظر عن الإزاحة (g) والخروج على الفور (q) بعد ضبط الوقت.


429
2018-02-14 12:32



شكر. لا تزال تظهر 1970 بعد هذا الأمر (w / sudo). قراءة ntpd manpage ، لست متأكدًا من مدى قوة هذا التحديث؟ - ysap
يخبر الخيار "-q" برنامج NTP لبدء التشغيل ، تعيين الوقت والخروج فوراً. يتيح الخيار "-g" تصحيح الاختلافات الزمنية الأكبر من 1000 ثانية. بالنسبة إلى المدى الطويل ، يجب عليك ببساطة تهيئة برنامج NTP ليعمل دائمًا. - tgharold
يجب أن تذهب هذه الإجابة إلى الأعلى ، لأنها صحيحة: تم إيقاف ntpdate وتثبيته فكرة سيئة ، لأنه يتعارض مع ntp. إذا كانت الساعة متوقفة ، فستحتاج إلى القيام بهذا الإجراء اليدوي لأن ntp لن تغير ساعتك وإلا لن تخبرك عن السبب. - Liam
لي، sudo ntpd -gq لا يخرج! أنا في 14.10 ولدي CTRL + C للمتابعة ... أو كم من المفترض أن يستغرق؟ - Yanick Rochon
لمعلوماتك ، على نظام بلدي (CentOS 6.6) ، كنت بحاجة لتغيير حالتين من sudo service ntp... إلى sudo service ntpd.... - rinogo


استخدم sntp لتعيين الوقت على الفور. فمثلا:

sudo sntp -s 24.56.178.140

يمكن أن تكون الأرقام بعد -s أي خادم وقت ntp ، واحد هو NIST في Ft. كولينز ، كولورادو.


50
2017-11-08 01:00



هذا مشغول! +1 - CappY
هذا العمل عندما لم "سودو ntpd -gq". - Matt White
لا أعرف عدد المرات التي جئت فيها للبحث عن هذه الإجابة. يعمل في كل مرة. - Chaos
غير قادر على تحديد موقع حزمة sntp؟ - temple
apt-get install sntp / yum install sntp (yes it works on CentOS، RedHat، fedore too) - ndemou


كما أشار آخرون إلى أن الحل الأفضل هو توجيه ntpd لتجاهل عتبة الذعر ، والتي هي 1000 ثانية افتراضياً. يمكنك تكوين حد الذعر بإحدى الطريقتين التاليتين:

  • تصحيح /etc/default/ntp والتأكد من وجود الخيار -g.
  • تحرير /etc/ntp.conf والمكان tinker panic 0 في القمة

حتى الآن هذا هو ما أوصى به الآخرون ولكن هناك خطوة أخرى أعتقد أنها يجب أن تأخذها. تثبيت برنامج fake-hwclock:

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

مع تركيب hackclock مزيفة لن يبدأ جهازك في التفكير هو 1970 مرة أخرى. عندما يقوم الجهاز الخاص بك بالتمهيد فإنه سيتم تعيين الساعة الخاصة به إلى الطابع الزمني fake-hwclock كتب أثناء آخر تمهيد / إيقاف التشغيل. هذا يعني أنه يمكن أن يكون لديك ساعة صحيحة إلى حد ما في حالة وجود مشاكل في الشبكة عند التشغيل.


37
2018-04-03 22:11



-g يبدو أنه لا يفعل شيئا بالنسبة لي (في سطر الأوامر ، ليس لدي /etc/default/ntp) ، ولكن مضيفا tinker panic 0 إلى ntp.conf عمل - Dave Cousineau
Sahuagin لا أعرف ماذا أقول لك غير أن لديك حزمة ntp غير قياسية. / etc / default / ntp جزء من الحزمة من Ubuntu: packages.ubuntu.com/xenial/amd64/ntp/filelist و- g كان خيارًا لطالما أتذكر. - dfc
آسف ، أعتقد أنني لست في الواقع على أوبونتو وكان ينبغي التفكير أكثر قليلاً قبل التعليق. tinker panic 0 يبدو بالتأكيد أن عملت على الرغم من. - Dave Cousineau


ntpdate هو برنامج مختلف عن صافي الدامون. من المحتمل أن يكون NTPDate خاطئًا عند التشغيل لأن ntpd يعمل على هذا المقبس.

من سطر الأوامر ، قم بتشغيل

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

يمكنك أيضًا إزالة تثبيت ntpd جميعًا (apt-get remove ntp) وإضافة نص برمجي cron لاستخدام ntpdate كل ساعة تقريبًا.

تحديث

من المحتمل ألا تحتوي خدمة ntp على قيمة ذات معنى بالنسبة لك على هذا النظام ، لذلك عليك إزالتها أولاً.

# sudo apt-get remove ntp

الآن أضف الأمر:

ntpdate -sb time.nist.gov

إلى /etc/rclocal 

اعادة التشغيل. يجب أن تكون جيدة في هذه المرحلة.


12
2018-02-13 23:07



الإجابة محدثة. - Stephan
لا يتم طرح ntpdate بها أو شيء من هذا؟ أيضا ، إذا كنت أفهم هذا بشكل صحيح ، فإن الخدمة تعمل على الحفاظ على مزامنة الساعة المحلية لساعة الخادم - لذلك لا بد من الانجراف. إذا قمت بإزالة ntp وقمت بتشغيل ntpdate مرة واحدة ، فلن تتأثر بساعة الانجراف عند تشغيل الجهاز لفترات طويلة؟ - ysap
ستيفان ، يرجى الاطلاع على التحديث رقم 2 على السؤال. - ysap
نعم ، يتم إلغاء ntpdate الخروج. يفضل استخدام "ntpd -q" (يتطلب كلا المتغيرين إيقاف ntpd أولاً). - tgharold


rdate -s tick.greyware.com

إذا كان كل ما تريد القيام به هو ضبط الساعة مرة واحدة وبسيطة


8
2018-02-26 22:57



شكر. ليس لدي النظام حاليًا للتحقق من هذا الأمر ، ولكن إذا اتبعت المناقشة في السؤال والجواب المقبول ، سترى أن المشكلة كانت في الواقع عدم توفر الشبكة في وقت تشغيل الأمر تحديث الساعة. - ysap
هذا ثابت قضية مزامنة الوقت على بلدي Raspberry بي. شكرا لكم. - Oliver Spryn


الطريقة الصحيحة للقيام بذلك على نظام Debian / Mint / Ubuntu (أو غيرها من مشتقات Debian) هي الحصول على الخط

NTPD_OPTS="-g"

في الملف

/etc/default/ntp

هذا يضمن أنه عند بدء تشغيل ntpd من البرنامج النصي /etc/init.d/ntp ، يتم تشغيله مع الخيار "-g" ، أي

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

للسماح لـ ntpd بتصحيح وقت النظام عندما يكون أكثر من 1000 ثانية ، على سبيل المثال عندما يكون وقت النظام هو 1 يناير 1970 عند بدء التشغيل بسبب عدم وجود أجهزة RTC.


7
2018-04-03 11:20



لدي بالفعل ، لكنه لا يزال يقول 3AM في نيويورك ، عندما ينبغي أن يكون 11:00. - chovy
أنا أيضا بالفعل بالضبط هذا الخط في /etc/default/ntpلكن لم يكن الوقت متزامنا. - Dawid Ferenczy


حاول استخدام -b خيار لخطوة الوقت.


4
2018-02-13 22:18



عند المحاولة من سطر الأوامر ، أحصل على الرد التالي: 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . ومع ذلك ، أعتقد أنني جربت هذا من قبل rc.local ولكنه لم يساعد. - ysap
تحتاج إلى إيقاف خدمة ntp أولاً قبل أن تتمكن من تشغيل ntpdate -b <ipaddress> - Wim Deblauwe