शेल के उपयोग से एनटीपीडी मशीन के समय को सफलतापूर्वक अपडेट करने की जाँच कैसे करें?


21

मैं अपने Linux मशीन के समय को एक निर्दिष्ट NTP सर्वर पर अद्यतन करने के लिए NTPD का उपयोग करने का प्रयास कर रहा हूँ।
यहाँ परिदृश्य है:

हर बार जब लिनक्स मशीन शुरू होती है, तो मैं NTP सर्वर से समय को अपडेट करना चाहता हूं और यदि यह सफल नहीं होता है, तो मैं हर 5 मिनट में फिर से सफलतापूर्वक प्रयास करना चाहता हूं (अधिकतम 2 घंटे है)।

मैंने आसपास खोज की और पाया कि मुझे (?) NTPD का उपयोग करना चाहिए और कुछ कमांड का उपयोग करना चाहिए जैसे:

#ntpdate ntp.server.com (एनटीडी शुरू करने से पहले)
#ntpd some_options_to_start

प्रश्न हैं:

  1. अगर इन आदेशों के द्वारा समय को सफलतापूर्वक अपडेट किया गया तो मुझे कैसे पता चलेगा?
  2. क्या मैं ntpd से समय अपडेट करने के लिए अंतराल सेट कर सकता हूं? (या मुझे कुछ sleepऔर जैसे लूप का उपयोग करना है do.. while/ forशेल में?)

ध्यान दें कि मैं एक शेल स्क्रिप्ट में उपरोक्त कमांड निष्पादित करना चाहता हूं और शेल को एक वेब सर्वर में डाल दूंगा। फिर क्लाइंट (एक वेब ब्राउज़र ब्राउज़र के साथ) वेबसाइट पर स्क्रिप्ट निष्पादित करेंगे। इसलिए मुझे यह जांचने की आवश्यकता है कि क्या अपडेट सफल है या क्लाइंट (वेब ​​पर) को परिणाम भेजने के लिए नहीं है।

जवाबों:


22

मॉनिटर करने के लिए स्क्रिप्ट का उपयोग ntpdआमतौर पर नहीं किया जाता है। आम तौर पर की तरह एक निगरानी उपकरण nagiosया muninडेमॉन नजर रखने के लिए प्रयोग किया जाता है। जब चीजें गलत हो जाएं तो टूल आपको अलर्ट भेज सकता है। मैं है muninमुझे ईमेल अगर ऑफसेट 15 मिलीसेकंड से अधिक है।

आम तौर पर, आपको सर्वर की एक विषम संख्या का उपयोग करना चाहिए ताकि डेमॉन सर्वरों के बीच एक चुनाव कर सके। तीन आमतौर पर पर्याप्त है, और पांच से अधिक अत्यधिक है। यदि आप इसकी निगरानी करते हैं तो आपके आंतरिक नेटवर्क पर ग्राहक एक आंतरिक सर्वर से प्राप्त करने में सक्षम होना चाहिए। घड़ी स्रोतों के रूप में वैध सर्वर या अपने ISP NTP या DNS सर्वर का उपयोग करें। सार्वजनिक पूल के साथ-साथ सार्वजनिक सर्वर भी हैं।

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

निम्न स्क्रिप्ट ntpd के आउटपुट में ऑफ़सेट को पार्स करेगा और अत्यधिक ऑफ़सेट की रिपोर्ट करेगा। यदि समस्या है तो आप इसे ईमेल से क्रोन से चला सकते हैं। स्क्रिप्ट 0.1 सेकंड की ऑफसेट पर चेतावनी देने में चूक करती है।

#!/bin/bash
limit=100   # Set your limit in milliseconds here
offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-')
for offset in ${offsets}; do
    if [ ${offset:-0} -ge ${limit:-100} ]; then
        echo "An NTPD offset is excessive - Please investigate"
        exit 1  
    fi  
done
# EOF

यह पहला उदाहरण है जो मैंने सिस्टम समय की निगरानी करने वाले किसी व्यक्ति के बारे में सुना है। बहुत बढ़िया जवाब।
ब्रूस एडिगर

@बिल्टर: शानदार जवाब। बहुत बहुत धन्यवाद। मेरे वर्तमान काम करने के लिए इसे लागू करने की कोशिश करेंगे
देखता

@BruceEdiger मैं इसे लेता हूं आपने कभी भी लोगों को टाइम-नट्स की मेलिंग सूची के बारे में नहीं सुना होगा।
dfc

जहाँ तक "ntpd की निगरानी के लिए एक स्क्रिप्ट का उपयोग करना आमतौर पर नहीं किया जाता है" जाता है; ntp टारबॉल के अंदर स्क्रिप्ट निर्देशिका विपरीत निष्कर्ष की ओर इशारा करती है।
dfc

@dvc स्क्रिप्ट वहां अनुरोधित कार्यक्षमता को शामिल नहीं करती हैं। एसएनएमपी जाल उत्पन्न करने के लिए कुछ कोड प्रतीत होते हैं, लेकिन मैंने एनटीपी की निगरानी के लिए एसएनएमपी का सामना नहीं किया है। मुझे कई बड़े संगठनों में अपनी खुद की मॉनीटरिंग करनी है।
BillThor

8

Ntpstat का प्रयोग करें।

myserver # ntpstat
synchronised to NTP server (10.89.160.13) at stratum 4
   time correct to within 124 ms
   polling server every 1024 s

1
उबंटू 16.04 पर, मुझे ntpstat छोटी गाड़ी मिल गई है। मेरे नेटवर्क केबल को अनप्लग करने के बाद, इसे अभी भी रिटर्न स्थिति 0 के साथ सिंक्रनाइज़ के रूप में दिखाया गया था, हालांकि ntpq -pकोई सहकर्मी नहीं दिखा। इसलिए मुझे इस उपयोगिता पर भरोसा नहीं है।
ह्यूजेंस

8

पहले प्रश्न का उत्तर देने के लिए, ntpdateआमतौर पर आपको बताता है कि उसने क्या किया, या शायद नहीं किया।

[root@flask rc.d]# ntpdate dagoo
12 Aug 10:04:03 ntpdate[20585]: adjust time server 10.0.0.15 offset -0.042285 sec

NTP डेमॉन, ntpdलगातार चलता है, और NTP सर्वरों (आमतौर पर कॉन्फ़िगर किया गया /etc/ntp.conf) को समय के लिए हर बार पूछता है । आपको हर 5 मिनट में अपनी स्क्रिप्ट नहीं चलानी चाहिए। ntpdateसर्वर के साथ मशीन को पास में लाया जाना चाहिए, और ntpdपृष्ठभूमि में चलेगा और इसे सिंक में रखेगा। आप उस अंतराल को सेट नहीं करते हैं जो ntpd कोशिश करता है, यह अंतराल को समायोजित करता है कि यह कैसे सर्वर से स्थानीय घड़ी के बहाव, और सर्वर से कनेक्शन की गुणवत्ता को मानता है।

आप एक कार्यक्रम का उपयोग कर सकते ntpdcहैं, जो यह देखता ntpdहै कि जानकारी क्या है:

1 % ntpdc 
ntpdc> peers
     remote           local      st poll reach  delay   offset    disp
=======================================================================
*min-time-01.ine 10.0.0.15        1 1024  377 0.07047  0.014673 0.14360
=dns-01.esd189.o 10.0.0.15        2 1024  377 0.07587  0.022277 0.13660
ntpdc>

मुझे लगता है कि जिस नंबर पर आपकी रुचि आमतौर पर "ऑफसेट" होती है, वह यह है कि आपके स्थानीय घड़ी की संख्या सर्वर की घड़ी से दूर है।

"साथियों" कमांड के manलिए ntpdcराज्यों के पेज के रूप में :

the current estimated delay, offset and dispersion of the peer, all in seconds.

तो, स्पष्ट रूप से, "ऑफसेट" सेकंड में है।

ऐसा प्रतीत होता है कि ntpdcइसे हटा दिया गया है, इसके द्वारा प्रतिस्थापित किया गया है ntpqntpqएक "साथियों" इंटरैक्टिव कमांड है, जो मिलीसेकंड में "ऑफसेट" देता है। मेरे Redhat सर्वर में दोनों हैं ntpdcऔर ntpqइसलिए आपको सावधान रहने की आवश्यकता है।


महान! लेकिन मेरे सवाल में एक अस्पष्ट हिस्सा है। मैं एक सी कार्यक्रम में एक शेल स्क्रिप्ट निष्पादित करने जा रहा हूं। और वापसी मूल्य की जांच करना चाहता था (शायद मैं सिस्टम ("शेलस्क्रिप्ट") फ़ंक्शन का उपयोग करूंगा)। आपका जवाब मुझे एक विचार देता है कि हमें NTPD के लिए अंतराल निर्धारित नहीं करना चाहिए और सिर्फ मामले में, मैं NTP सर्वर को बदलना चाहता हूं, मुझे ntp.conf फ़ाइल को संपादित करना है। क्या आप मुझे बता सकते हैं कि ntpd ntp सर्वर के साथ कैसे काम करता है। क्या मुझे ntp.conf फ़ाइल (फिर शेल स्क्रिप्ट का उपयोग करके ) को संपादित करने के बाद ntpd डेमॉन को पुनः आरंभ करना है
देखता

ntpd एक डेमन प्रक्रिया है - यह निरंतर चलती है। यह तय करता है कि वर्तमान समय के लिए किसी सर्वर से कितनी बार पूछना है, और कितनी बार और कितनी बार स्थानीय घड़ी को बदलना है, इसके आधार पर स्थानीय घड़ी कैसे बदलती है: आप वास्तव में किसी भी अंतराल को नियंत्रित नहीं कर सकते हैं। ntpd पृष्ठभूमि में चलता है। NTP सर्वर को बदलने के लिए, आप /etc/ntp.conf को संपादित करते हैं, और फिर ntpd शुरू करते हैं।
ब्रूस एडिगर

मुझे यह भी उल्लेख करना चाहिए कि आपके द्वारा पोस्ट किए गए कोड टुकड़े को बूट के दौरान रनलेवल 3 पर या उसके ऊपर चलना चाहिए। ntpdate सिस्टम क्लॉक को सेट करता है, फिर ntpd एक डेमॉन प्रक्रिया बन जाती है, और घड़ी को सर्वर पर सिंक किया जाता है। आमतौर पर, आप कोड की उन 2 पंक्तियों को केवल "घड़ी सेट करें" नहीं चलाते हैं।
ब्रूस एडिगर

मैं समझ गया। के बारे में कैसे ntpdate जब यह गलत ntpserver (उदाहरण के लिए) हो जाता है और सही ढंग से काम नहीं करते। मैं इसे शेल स्क्रिप्ट से कैसे जान सकता हूं?
देखता है

7

ntp-wait इस समस्या के लिए बनाया गया था।

पांच मिनट man ntp-waitऔर आप के साथ रहना चाहिए ...


मुझे डेबियन में एनटीपी-प्रतीक्षा मिली, लेकिन सेंटोस में नहीं। कृपया सहायता कीजिए !
मासिमो

2

मैंने @BillTHor bash स्क्रिप्ट को ntpdstat से बाहर निकलने के कोड के लिए एक चेक> 0: में जोड़ा।

#!/bin/bash
ntpstat > /dev/null
if [ $? -ne 0 ]; then
        echo "NTPD not synchronized - Please investigate"
        exit 1
fi
limit=1000   # Set your limit in milliseconds here
offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-')
for offset in ${offsets}; do
    if [ ${offset:-0} -ge ${limit:-100} ]; then
        echo "An NTPD offset is excessive - Please investigate"
        exit 1
    fi
done
# EOF

[अद्यतन] चूंकि ntpq आउटपुट का उपयोग करने वाली स्क्रिप्ट लार्ज ऑफ़सेट (ऑफ़सेट ऑफ़ 4 ऑफसेट से अधिक) के लिए अप्रयुक्त थी, मैंने केवल ntpstat का उपयोग करके एक नया संस्करण आज़माया:

#!/bin/bash
ntpstat > /dev/null
if [ $? -gt 0 ]; then
        echo "NTPD not synchronized - Please investigate"
        exit 1
fi
limit=1000   # Set your limit in milliseconds here
#offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-')
#offsets=$(ntpq -nc peers | tail -n +3 | tr -s ' ' | cut -d ' ' -f 9 | tr -d '-' |tr -d '.')
offsets=$(ntpstat | tail -n +2 | head -n 1 | cut -c 27- | tr -d ' ms')
for offset in ${offsets}; do
    if [ ${offset:-0} -ge ${limit:-100} ]; then
        echo "NTPD offset is excessive: ${offset:-0} [ms] > ${limit:-100} [ms] - Please investigate"
        exit 1
    fi
done
# EOF`enter code here`

2

एनटीपी ऑफसेट निम्नलिखित यूनिक्स पाइपलाइन के साथ प्राप्त किया जा सकता है:

/usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }'

एनटीपी सहकर्मी की गिनती निम्नलिखित यूनिक्स पाइपलाइन के साथ प्राप्त की जा सकती है:

/usr/sbin/ntpq -pn | egrep -c '^\*|^\+'

के लिए एनटीपी offet हम का उपयोग करें:

  • चेतावनी> 250 मी
  • महत्वपूर्ण> 500 मी

के लिए एनटीपी सहकर्मी गिनती हम का उपयोग करें:

  • कोई चेतावनी नहीं
  • महत्वपूर्ण <१

Zabbix- तैयार NTP निगरानी विन्यास (स्रोत: जॉयंट):

# NTP
UserParameter=ntp.offset,/usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }'
UserParameter=ntp.peers,/usr/sbin/ntpq -pn | egrep -c '^\*|^\+'

Nagios- तैयार NTP निगरानी प्लगइन्स:

check_ntp_offset:

#!/bin/bash
# thresholds
thresh_warn=250
thresh_crit=500

# metric
ntp_offset=$(/usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }')

# Exit codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

if [[ ! "$ntp_offset" =~ ^[0-9]+$ ]] ; then
   # NTP offset could not be read successfully
   echo "NTP OFFSET UNKNOWN - $ntp_offset"
   exit $STATE_UNKNOWN
elif [[ "$ntp_offset" -gt "$thresh_crit" ]] ; then
   # NTP offset is higher than the critical threshold
   echo "NTP OFFSET CRITICAL - ${ntp_offset}ms (> ${thresh_crit}ms)"
   exit $STATE_CRITICAL
elif [[ "$ntp_offset" -gt "$thresh_warn" ]] ; then
   # NTP offset is higher than the warning threshold
   echo "NTP OFFSET WARNING - ${ntp_offset}ms (> ${thresh_warn}ms)"
   exit $STATE_WARNING
else
   # NTP offset is within thresholds
   echo "NTP OFFSET OK - ${ntp_offset}ms (< ${thresh_warn}ms)"
   exit $STATE_OK
fi

check_ntp_peers:

#!/bin/bash
# thresholds
thresh_warn=1
thresh_crit=1

# metric
ntp_peers=$(/usr/sbin/ntpq -pn | egrep -c '^\*|^\+')

# Exit codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

if [[ ! "$ntp_peers" =~ ^[0-9]+$ ]] ; then
   # NTP peers could not be read successfully
   echo "NTP PEERS UNKNOWN - $ntp_peers"
   exit $STATE_UNKNOWN
elif [[ "$ntp_peers" -lt "$thresh_crit" ]] ; then
   # NTP peers is lower than the critical threshold
   echo "NTP PEERS CRITICAL - $ntp_peers (< $thresh_crit)"
   exit $STATE_CRITICAL
elif [[ "$ntp_peers" -lt "$thresh_warn" ]] ; then
   # NTP peers is lower than the warning threshold
   echo "NTP PEERS WARNING - $ntp_peers (< $thresh_warn)"
   exit $STATE_WARNING
else
   # NTP peers is within thresholds
   echo "NTP PEERS OK - $ntp_peers (> $thresh_warn)"
   exit $STATE_OK
fi

मुझे वास्तव में -w और -c के साथ नागोइस लिपियों में चेतावनी और महत्वपूर्ण थ्रेसहोल्ड को कॉन्फ़िगर करने देना चाहिए। वे वास्तव में पूरी तरह से प्लगइन के बिना तैयार नहीं हैं। उस पर एक ट्यूटोरियल में आगे मार्गदर्शन: http://www.kernel-panic.it/openbsd/nagios/nagios.html.html


1

एनटीपीसी (नेटवर्क / मशीन ऑन / ऑफ, सस्पेंड, आदि) से बेहतर उपयोग के लिए क्रॉनिक का दावा किया जाता है। देख

http://fedoraproject.org/wiki/Features/ChronyDefaultNTP

आरई मुझे क्यों लगता है कि क्रॉनी अच्छा है: यह मेरे फेडोरा मशीन पर पहले से स्थापित था और मेरे पास इसके साथ कोई मुद्दा नहीं था (अब इसे वर्षों के लिए उपयोग किया जाता है)। मेरे पास पहले कभी भी ntpd के साथ कोई समस्या नहीं है, लेकिन यदि आपने मेरे द्वारा दिए गए लिंक पर पढ़ा है, तो कुछ जानकारी है कि क्रोन्य हमेशा मशीनों पर गैर के लिए बेहतर क्यों है। इसलिए मैंने इसे चुनने की कोशिश करने का सुझाव दिया, यह उसके लिए बेहतर काम हो सकता है या नहीं। तो यह बहुत अच्छा ट्यूनिंग, अनुकूलन और हैकिंग ntpd में जाने से पहले कोशिश करने के लिए सिर्फ एक और अच्छा विकल्प है।


1
कृपया टिप्पणी करें कि क्या आप अपने तर्क के साथ
पतन

क्यों आपको लगता है कि क्रॉनी बेहतर है?
dfc

@ पीडीएफ, यह मेरे फेडोरा मशीन पर पहले से स्थापित था और मुझे इसके साथ कोई समस्या नहीं थी (अब वर्षों तक इसका उपयोग किया गया है)। मेरे पास पहले कभी भी ntpd के साथ कोई समस्या नहीं थी, लेकिन यदि आपने मेरे द्वारा दिए गए लिंक पर पढ़ा है, तो कुछ जानकारी है कि क्रोन्य हमेशा मशीनों पर गैर के लिए बेहतर क्यों है। इसलिए मैंने इसे चुनने की कोशिश करने का सुझाव दिया, यह उसके लिए बेहतर काम हो सकता है या नहीं। तो यह बहुत अच्छा ट्यूनिंग, अनुकूलन और हैकिंग ntpd में जाने से पहले कोशिश करने के लिए सिर्फ एक और अच्छा विकल्प है।
अकोस्टेडिनोव

बल्कि इस जानकारी को उत्तर पर ही जोड़ें। यह काफी मूल्यवान है, और आपको सिर्फ वोट उल्टा पड़ सकता है।
tshepang

आपका उत्तर वास्तविक प्रश्न से मेल नहीं खाता है, मेरी राय में प्रश्न पर टिप्पणी करना बेहतर है।
Jaime Hablutzel

1
#!/bin/bash

limit=100   # Set your limit in milliseconds here

offsets=$(ntpq -nc peers | tail -n +3 | awk '{print $9 }' | tr -d '-')

for offset in ${offsets}; 
do

    if [ ${offset:-0} -ge ${limit:-100} ];
    then
        echo "An NTPD offset is excessive - Please investigate"

        exit 1

    fi  
done

0
#!/usr/bin/bash
#set -x
NTPLIMIT=100   # Set your NTPLIMIT in milliseconds here
offsets=$(ntpq -nc peers | tail -3 | cut -c 62-66 | tr -d '-')
for offset in ${offsets}; do
    if [ ${offset:-0} -ge ${NTPLIMIT:-100} ]; then
        echo "An NTPd offset is excessive Please investigate" exit;
        else
                echo "NTP is within 0.1 second of time server"
                exit;
        fi
done

ऊपर दिए गए पिछले उत्तर के समान है, लेकिन पिछले कमांड के रूप में एक मामूली संशोधन के साथ यदि कई ऑफसेट के लिए स्टेटमेंट चलेगा, यानी यदि ऑफ़सेट 3 है तो यह एनटीपी प्रिंट करेगा 0.1 के भीतर .... बंद होने से पहले 3 बार। यदि आपके पास एक सर्वर है जो एक लंबा रास्ता है जो सिंक से बाहर है तो कष्टप्रद हो सकता है। संभवतः लूप को हटाने का एक तरीका है ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.