एनटीपी का उपयोग करके घड़ी अपडेट को कैसे मजबूर करें?

मैं एक एआरएम आधारित एम्बेडेड सिस्टम पर उबंटू चला रहा हूं जिसमें बैटरी समर्थित आरटीसी की कमी है । जागने का समय 1970 के दौरान कहीं है । इस प्रकार, मैं समय को वर्तमान समय में अपडेट करने के लिए एनटीपी सेवा का उपयोग करता हूं ।

मैंने निम्नलिखित पंक्ति को इसमें जोड़ा /etc/rc.local फ़ाइल:

sudo ntpdate -s time.nist.gov

हालांकि, के बाद से स्टार्टअप के साथ, यह अभी भी की एक जोड़ी लेता है जब तक कुछ मिनट के समय के साथ अद्यतन किया जाता है, जो अवधि के दौरान मैं काम नहीं कर सकता के साथ प्रभावी ढंग से tar और make.

मैं किसी भी समय घड़ी अपडेट को कैसे मजबूर कर सकता हूं?


अद्यतन 1: निम्नलिखित (एरिक और स्टीफ़न के लिए धन्यवाद) कमांड लाइन से ठीक काम करता है, लेकिन डालने पर घड़ी को अपडेट करने में विफल रहता है /etc/rc.local:

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; dateThu 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 अपडेट के जवाब में आए कुछ सुझावों का पालन करने की कोशिश की, लेकिन वास्तव में आवश्यकतानुसार काम करने के लिए कुछ भी नहीं लगता है । यहाँ मैंने क्या कोशिश की है:

  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 ठीक काम करता है?

के बजाय ntpdate (जो है पदावनत), उपयोग करें ntpd:

sudo service ntp stopsudo ntpd -gqsudo service ntp start

-gq ऑफसेट की परवाह किए बिना समय को सही करने के लिए एनटीपी डेमॉन को बताता है (g) और तुरंत बाहर निकलें (q) समय निर्धारित करने के बाद ।

शायद ntp सेवा चल रही है, इसीलिए ntpdate सॉकेट (पोर्ट 123 यूडीपी) नहीं खोल सकता और एनटीपी सर्वर से कनेक्ट नहीं कर सकता ।

कमांड लाइन से प्रयास करें:

sudo service ntp stopsudo ntpdate -s time.nist.govsudo service ntp start

अगर आप इसे अंदर रखना चाहते हैं /etc/rc.local निम्नलिखित का प्रयोग करें:

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

तुरंत समय निर्धारित करने के लिए एसएनटीपी का उपयोग करें । इसके मैन पेज से कुछ उदाहरण:

USAGE     sntp ntpserver.somewhere             is the simplest use of this program and can be run as an unprivileged command to check the current time and error in the local clock.     sntp -Ss -M 128 ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -Ss -M 128 ntpserver.somewhere will request the time from the server, and if that server reports that it is             synchronized then if the offset adjustment is less than 128 milliseconds the correction will be slewed, and if the correction is more than 128 milliseconds the correction  will             be stepped.     sntp -S ntpserver.somewhere             With suitable privilege, run as a command or from a cron(8) job, sntp -S ntpserver.somewhere will set (step) the local clock from a synchronized specified server, like the (dep‐             recated) ntpdate(8), or rdate(8) commands.

यह किसी भी एनटीपी समय सर्वर के साथ काम करता है । सर्वर की एक सुविधाजनक सूची इस पर मिल सकती है ntppool.org।

आपको चाहिए sudo उदाहरण के लिए विशेषाधिकार:

sudo sntp -Ss -M 128 0.de.pool.ntp.org

उपयोग करें timedatectl (सिस्टमड सेवा इकाई) समय निर्धारित करने के लिए । ntp पदावनत है ।

sudo systemctl restart systemd-timesyncd.service

आप समय के साथ लॉग पढ़ने अद्यतन किया गया था जांच कर सकते हैं journalctl -xe | tail.

के साथ स्थिति timedatectl status और config में /etc/systemd/timesyncd.conf.

संदर्भ

जैसा कि दूसरों ने बताया है कि सबसे अच्छा समाधान एनटीपीडी को पैनिक थ्रेशोल्ड को अनदेखा करने का निर्देश देना है, जो डिफ़ॉल्ट रूप से 1000 सेकंड है । आप पैनिक थ्रेशोल्ड को दो तरीकों में से एक में कॉन्फ़िगर कर सकते हैं:

  • संपादित करें /etc/default/ntp और सुनिश्चित करें कि-जी विकल्प मौजूद है ।
  • संपादित /आदि/ntp.conf और जगह tinker panic 0 शीर्ष पर

अब तक यह अनिवार्य रूप से दूसरों ने सिफारिश की है लेकिन एक और कदम है जो मुझे लगता है कि आपको लेना चाहिए । नकली-एचडब्ल्यूक्लॉक प्रोग्राम स्थापित करें:

# apt-get install fake-hwclockfake-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.

नकली-एचडब्ल्यूक्लॉक स्थापित होने के साथ आपकी मशीन यह सोचना शुरू नहीं करेगी कि यह 1970 फिर से है । जब आपकी मशीन बूट हो जाती है तो यह अपनी घड़ी को टाइमस्टैम्प नकली पर सेट कर देगी-एचडब्ल्यूक्लॉक ने अंतिम रिबूट/शटडाउन के दौरान लिखा था । इसका मतलब है कि जब आप बूट करते हैं तो नेटवर्क समस्याएँ होने की स्थिति में आपके पास कुछ सही घड़ी हो सकती है ।

एनटीपीडीएटी नेट डेमॉन से अलग एक कार्यक्रम है । एनटीपीडेट शायद बूट पर गलत हो रहा है क्योंकि एनटीपीडी उस सॉकेट पर चल रहा है ।

कमांड लाइन से, चलाएं

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

आप एनटीपीडी को एक साथ अनइंस्टॉल भी कर सकते हैं (उपयुक्त-एनटीपी निकालें) और हर घंटे एनटीपीडेट का उपयोग करने के लिए क्रॉन स्क्रिप्ट जोड़ें ।

अपडेट करें

एनटीपी सेवा शायद इस प्रणाली पर आपके लिए सार्थक मूल्य नहीं होगा, इसलिए पहले इसे हटा दें ।

# sudo apt-get remove ntp

अब कमांड जोड़ें:

ntpdate -sb time.nist.gov

को /etc/rclocal

रिबूट। उस बिंदु पर अच्छा होना चाहिए ।

rdate -s tick.greyware.com

यदि आप केवल एक बार घड़ी सेट करना चाहते हैं, तो सरल

ध्यान दें कि कुछ मौजूदा उबंटू आधारित सिस्टम अब डिफ़ॉल्ट रूप से एनटीपी सेवा का उपयोग भी नहीं करते हैं । मेरे लिनक्स मिंट 19 (उबंटू 18.04) मशीन पर, समय द्वारा रखा जाता है systemd-timesyncd.

इसलिए सिंक खो जाने के बाद अप टू डेट समय प्राप्त करने के लिए, मैं बस दौड़ता हूं

sudo systemctl restart systemd-timesyncd

चूंकि 15.04 उबंटू डिफ़ॉल्ट रूप से सिस्टमड का उपयोग करता है । इसलिए समय जैसी महत्वपूर्ण प्रणालियों को सिस्टमड के माध्यम से प्रबंधित किया जाता है । यह पता लगाने के लिए कि आपका सिस्टम किस सेवा का उपयोग कर रहा है जैसे कुछ चलाएं

systemctl list-unit-files | grep -E 'ntp|timesyncd'

16.04 पर टेकजेएस के लिए सेवा थी ntp. उबंटू 18.04 (मिंट 19) पर खुद के लिए सेवा है systemd-timesyncd. दिलचस्प बात यह है कि मैंने अपने पास 16.04 सर्वर में लॉग इन किया है और इसका उपयोग करता है systemd-timesyncd साथ ही ।

डेबियन / मिंट / उबंटू (या अन्य डेबियन व्युत्पन्न) प्रणाली पर ऐसा करने का सही तरीका लाइन है

NTPD_OPTS="-g"

फ़ाइल में

/etc/default/ntp

यह सुनिश्चित करता है कि जब एनटीपीडी /आदि/इनिट से शुरू किया जाता है । डी / एनटीपी स्क्रिप्ट, यह "-जी" विकल्प के साथ चलता है, अर्थात

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

एनटीपीडी को सिस्टम समय को सही करने की अनुमति देने के लिए जब यह 1000 से अधिक है, उदाहरण के लिए जब सिस्टम समय स्टार्टअप पर 1 जनवरी 1 9 70 है क्योंकि कोई हार्डवेयर आरटीसी नहीं है ।

tlsdate टीएलएस के साथ दूरस्थ सर्वर से सुरक्षित रूप से कनेक्ट करके और सुरक्षित हैंडशेक से दूरस्थ समय निकालकर स्थानीय घड़ी सेट करता है । विपरीतntpdate, tlsdate टीसीपी का उपयोग करता है, उदाहरण के लिए रिमोट एचटीटीपीएस या टीएलएस सक्षम सेवा से कनेक्ट करना, और विरोधियों के खिलाफ कुछ सुरक्षा प्रदान करता है जो आपको दुर्भावनापूर्ण समय की जानकारी खिलाने का प्रयास करते हैं ।

$ tlsdate -V -n -H encrypted.google.com

से यहाँ:
ntpdate -s ntp.ubuntu.com

एनटीपीडेट पर’ - बी ’ ध्वज पर ध्यान दें । एनटीपीडेट के मैन पेज से: "एडजटाइम() सिस्टम कॉल का उपयोग करके स्लीव (डिफ़ॉल्ट) के बजाय सेटटाइमऑफडे() सिस्टम कॉल का उपयोग करके कदम रखने के लिए समय को मजबूर करें । बूट समय पर स्टार्टअप फ़ाइल से कॉल करने पर इस विकल्प का उपयोग किया जाना चाहिए । "नीचे दिए गए कई उत्तरों में यह शामिल नहीं है, और शायद चीजों को काम करने में समस्या का हिस्सा है । विचार करें कि ‘-बी’ ध्वज में यह उल्लेख है कि 128 एमएस से अधिक ऑफसेट को डिफ़ॉल्ट ‘स्लीव’ तंत्र का उपयोग करके सिंक करने में घंटों लग सकते हैं

timedatectl, लेकिन How to update system time behind a proxy? - Ask Ubuntu

वहाँ रहे हैं कोई ज़रूरत नहीं है का उपयोग करने के लिए sudo में /etc/rc.लोकेल फ़ाइलें ।. वे सभी पहले से ही रूट के रूप में चलाए जा रहे हैं ।