Því einfaldara sem verkefnið er, því oftar geri ég mistök

Því einfaldara sem verkefnið er, því oftar geri ég mistök

Þetta léttvæga verkefni kom upp einn föstudagseftirmiðdag og hefði átt að taka 2-3 mínútur af tíma. Almennt eins og alltaf.

Samstarfsmaður bað mig um að laga handritið á þjóninum sínum. Ég gerði það, rétti honum það og lét óvart falla: „Tíminn er 5 mínútur fljótur. Láttu netþjóninn sjá um samstillinguna sjálfan. Hálftími, klukkutími leið, og hann pústaði enn og bölvaði hljóðlega.

„Heimska! — Ég hugsaði með því að skipta yfir í netþjónaborðið — allt í lagi, ég mun taka mér hlé í nokkrar mínútur í viðbót.

Látum okkur sjá ntp, rdate, sdwdate ekki uppsett tímasyncd óvirk og ekki í gangi.

# timedatectl
      Local time: Sun 2019-08-25 20:44:39 +03
  Universal time: Sun 2019-08-25 17:44:39 UTC
        RTC time: Sun 2019-08-25 17:39:52
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Hér mun ég strax taka eftir því að vélbúnaðartíminn er réttur: það verður auðveldara að fletta lengra.

Þetta er þar sem röð mistaka hófst.

Fyrstu mistökin. Sjálfstraust

Smelltu-klakk...

# systemctl enable systemd-timesyncd.service && systemctl start systemd-timesyncd.service && ntpdate 0.ru.pool.ntp.org && timedatectl set-ntp on && timedatectl
25 Aug 21:00:10 ntpdate[28114]: adjust time server 195.210.189.106 offset -249.015251 sec
      Local time: Sun 2019-08-25 21:00:10 +03
  Universal time: Sun 2019-08-25 18:00:10 UTC
        RTC time: Sun 2019-08-25 18:00:10
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

Allt er í lagi, tíminn er samstilltur, kerfistíminn passar við vélbúnaðinn. „Taktu það,“ sagði ég og sneri aftur að viðskiptum mínum.

„Taktu hvað? — Samstarfsmaðurinn var reiður. "Það er á sama tíma!"

Því meira sem þú leysir dæmigerð vandamál, því meira verður hugsunin þín blikklaus og þú heldur ekki lengur að hundraðasta eða þúsundasta ástandið verði öðruvísi, en ekki í þetta skiptið.

# timedatectl
      Local time: Sun 2019-08-25 21:09:15 +03
  Universal time: Sun 2019-08-25 18:09:15 UTC
        RTC time: Sun 2019-08-25 18:05:04
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Kerfistíminn er aftur rangur.

Reynum aftur:

# ntpdate 0.ru.pool.ntp.org && timedatectl && sleep 1 && timedatectl
25 Aug 21:07:37 ntpdate[30350]: step time server 89.175.20.7 offset -249.220828 sec
      Local time: Sun 2019-08-25 21:07:37 +03
  Universal time: Sun 2019-08-25 18:07:37 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:11:46 +03
  Universal time: Sun 2019-08-25 18:11:46 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Við skulum gera það öðruvísi:

# date -s "2019-08-25 21:10:30" && date && sleep 1 && timedatectl
Sun Aug 25 21:10:30 +03 2019
Sun Aug 25 21:10:30 +03 2019
      Local time: Sun 2019-08-25 21:14:36 +03
  Universal time: Sun 2019-08-25 18:14:36 UTC
        RTC time: Sun 2019-08-25 18:10:30
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Og svona:

# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:11:31 +03
  Universal time: Sun 2019-08-25 18:11:31 UTC
        RTC time: Sun 2019-08-25 18:11:31
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:15:36 +03
  Universal time: Sun 2019-08-25 18:15:36 UTC
        RTC time: Sun 2019-08-25 18:11:32
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Tíminn er stilltur á sekúndubrot og byrjar strax að „þrjóta“ aftur.

Á sama tíma sjáum við í loggunum, við slíka handvirka breytingu, aðeins kerfisskýrslur um að tíminn hafi breyst, hvort um sig, í rétta/ranga átt og einstaka sinnum Endursamstillir frá systemd-timesyncd.

Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd-timesyncd[29258]: System time changed. Resyncing.
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed
Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed

hér

# ps afx | grep "[1]187"
 1187 ?        Ss     0:02 /lib/systemd/systemd --user

Á þessum tímapunkti var þegar nauðsynlegt að leita að ástæðunni, en yfir 18 ára gjöf hefur heilinn safnað tölfræði um „tíma“ villur og kennir af vana aftur samstillingu.
Slökkum alveg á því.

# timedatectl set-ntp off && systemctl stop systemd-timesyncd.service
# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:25:40 +03
  Universal time: Sun 2019-08-25 18:25:40 UTC
        RTC time: Sun 2019-08-25 18:25:40
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:29:31 +03
  Universal time: Sun 2019-08-25 18:29:31 UTC
        RTC time: Sun 2019-08-25 18:25:41
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

og í loggunum

Aug 25 21:25:40 wisi systemd[1]: Time has been changed
Aug 25 21:25:40 wisi systemd[1187]: Time has been changed
Aug 25 21:29:30 wisi systemd[1]: Time has been changed
Aug 25 21:29:30 wisi systemd[1187]: Time has been changed

Endursamstillir hvarf og að öðru leyti eru stokkarnir óspilltir.

Athugaðu niðurstöðurnar tcpdump á port 123 á öllum viðmótum. Það eru engar beiðnir, en tíminn er enn að renna út.

Villa tvö. Þjóta

Það er klukkutími eftir til loka vinnuvikunnar og ég vil ekki fara um helgina með léttvæg óleyst vandamál (ekki taka eftir tímanum í kóðanum, greinin var skrifuð á næstu dögum ).
Og hér aftur, í stað þess að leita að ástæðunni, fór ég að reyna að koma með skýringu á niðurstöðunni. Ég segi „finna upp“ vegna þess að sama hversu rökrétt skýringin á niðurstöðunni kann að vera, þá er það gölluð nálgun til að leysa vandamálið.

Þessi netþjónn er streymisþjónn og breytir DVB-S2 straumnum í IP. DVB-S straumurinn inniheldur tímastimpla, þannig að móttakarar, multiplexers, scramblerar og sjónvörp nota þá oft til að samstilla kerfisklukkuna. DVB-S töflureklar eru innbyggðir í kjarnann, þannig að fljótlegasta leiðin til að tryggja að DVB-S2 straumurinn sé fjarlægður er að aftengja snúrurnar sem koma frá „plötunum“. Sem betur fer er þjónninn á bak við vegginn, svo það sé.

Auðvitað, ef logsarnir hefðu innihaldið það sem ætti að vera þarna, hefði þetta ekki gerst, en meira um það, aftur, í lok greinarinnar.

Jæja, þar sem við höfum þegar fjarlægt öll gervihnattamerki, munum við einnig fjarlægja jarðnesk merki - á sama tíma drögum við út allar netsnúrur. Miðlarinn verður lokaður frá umheiminum og vinnur algjörlega sjálfstætt, en kerfisklukkan er enn að flýta sér.

Vinnuvikan er liðin og dagsetning/tímamálið sjálft er ekki mikilvægt, svo þú getur bara farið heim, en hér geri ég ný mistök.

Villa þrjú. Ráðgjafar

Aldrei! Spyrðu aldrei spurninga á spjallborðum og almennum sérhæfðum (a la stackoverflow) síðum ef svarið við því krefst meira en að kynna sér fyrstu síðu Google og lesa eina mansíðu.

Þeir munu senda þig aftur á Google, lesa sama mann og útskýra almennt reglur spjallsins/síðunnar, en gefa þér ekki svar.

Hér eru nokkrir hlutlægir þættir:

  • enginn nema þú getur líka þekkt vandamálið;
  • enginn getur framkvæmt próf við sömu aðstæður og þú

og huglægt:

  • þú gefur kannski ekki öll inntak til að leysa vandamálið, vegna þess að þú ert þegar kominn með "rétta" stefnu og ert að kynna kjarna málsins með áherslu á það;
  • verkstjórinn (stjórnandi, fornmaður, stjórnandi) hefur alltaf rétt fyrir sér, ef verkstjórinn hefur rangt fyrir sér... jæja, þú veist...

Ef þú hélst innan marka ritskoðaðs orðaforða þegar þú svaraðir athugasemdum, þá ertu með sterkar taugar.

ákvörðun

Það er engin þörf á að skipta verkefnum í einföld og flókin.

Við hættum að treysta á reynslu okkar, tölfræði, ráðgjafa og byrjum ekki að „útskýra“ lokaniðurstöðuna, heldur að leita stöðugt að ástæðunni.

Þar sem einhver setur tímann verður samsvarandi kerfiskall að eiga sér stað.

Rétt eins og í hugbúnaðarskjölum eru bestu skjölin heimildirnar, þannig í kerfisstjórnun er besti aðstoðarmaðurinn endurskoðun, í okkar tilviki endurskoðað.

Augnablik efasemdaÉg fór í gegnum mana, en var ekki alveg viss um að aðeins sé hægt að stilla tímann í Linux klukka_stillingartími и ákveðinn tími dags, svo fyrir fyrsta prófið valdi ég alla „viðeigandi“ símtölin:

# man syscalls | col | grep -F '(2)' | grep -vE '(:|;)' | grep -E '(time|date|clock)' | sed "s/(2).*//" | xargs -I SYSCALL echo "-S SYSCALL " | xargs echo
-S adjtimex -S clock_adjtime -S clock_getres -S clock_gettime -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S s390_runtime_instr -S setitimer -S settimeofday -S stime -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_create -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

og farga s390_runtime_instr, stime, timerfd_create, sem endurskoðunartl þekkti það ekki, hóf upphaflega úttekt í formi:

auditctl -a exit,always -S adjtimex -S clock_adjtime -S clock_getres -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S semtimedop -S setitimer -S settimeofday -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

Eftir að hafa gengið úr skugga um að það séu engir aðrir annálar á skráarstöðum sem ég hef áhuga á syscals Fyrir utan þessa tvo notaði ég aðeins þá frekar.

Að keyra úttekt á kerfissímtölum klukka_stillingartími и ákveðinn tími dags og reyndu að breyta dagsetningunni:

# auditctl -a exit,always -S clock_settime -S settimeofday && date -s "2019-08-22 12:10:00" && sleep 5 && auditctl -D

Fimm sekúndna seinkun er bætt við svo „sníkjudýrið“ okkar er tryggt að leiðrétta tímann.

Við skulum skoða skýrsluna:

# aureport -s -i

Syscall Report
=======================================
# date time syscall pid comm auid event
=======================================
Warning - freq is non-zero and incremental flushing not selected.
1. 08/22/2019 12:10:00 settimeofday 3088 chkcache_proces root 479630
2. 08/26/2019 09:37:06 clock_settime 1538 date root 479629

Hér sjáum við okkar dagsetning og okkur ókunnugt chkcache_processes. Það endaði í skýrslunni hér að ofan vegna þess að aureport flokkaði úttakið eftir dagsetningu þegar umbreytt var úr tvöfaldri, og atburðurinn átti sér stað á þeim tíma sem við stilltum dagsetning -s "2019-08-22 12:10:00".
Hver fæddi hann?

# ausearch -sc settimeofday --comm "chkcache_proces"
----
time->Thu Aug 22 12:10:00 2019
type=PROCTITLE msg=audit(1566465000.000:479630): proctitle="/usr/local/bin/oscam"
type=SYSCALL msg=audit(1566465000.000:479630): arch=c000003e syscall=164 success=yes exit=0 a0=7fde0dfc6e60 a1=0 a2=136cf a3=713ba56 items=0 ppid=3081 pid=3088 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts20 ses=68149 comm="chkcache_proces" exe="/usr/local/bin/oscam" key=(null)

/usr/local/bin/oscam - Sníkjudýrið okkar hefur fundist. Þrátt fyrir „illgjarn“ hegðun er ómögulegt að neita skilyrta aðgangskerfinu, en mig langar samt að vita oscam, WTF?

Svarið er fljótt að finna í frumkóða:

#if defined(CLOCKFIX)
if (tv.tv_sec > lasttime.tv_sec || (tv.tv_sec == lasttime.tv_sec && tv.tv_usec >= lasttime.tv_usec)) // check for time issues!
{
  lasttime = tv; // register this valid time
}
  else
{
  tv = lasttime;
  settimeofday(&tv, NULL); // set time back to last known valid time
  //fprintf(stderr, "*** WARNING: BAD TIME AFFECTING WHOLE OSCAM ECM HANDLING, SYSTEMTIME SET TO LAST KNOWN VALID TIME **** n");
}

Hversu krúttlegt það lítur út hérna tjáði sig um línu viðvörun...

Heimild: www.habr.com

Bæta við athugasemd