Iktar ma jkun sempliċi l-kompitu, aktar spiss nagħmel żbalji

Iktar ma jkun sempliċi l-kompitu, aktar spiss nagħmel żbalji

Dan il-kompitu trivjali qamet il-Ġimgħa wara nofsinhar u kellu jieħu 2-3 minuti. B'mod ġenerali, bħal dejjem.

Kollega talabni nirranġa l-iscript fuq is-server tiegħu. Għamilt dan, tajtuh u involontarjament niżel: "Il-ħin huwa 5 minuti mgħaġġel." Ħalli s-server jimmaniġġja s-sinkronizzazzjoni innifsu. Għaddiet nofs siegħa, siegħa, u xorta nefaħ u bil-kwiet misħut.

“Stupidu! — Ħsibt, naqleb għall-console tas-server — okay, nieħu pawża għal ftit minuti oħra.”

Ejja naraw ntp, rdate, sdwdate mhux installat timesyncd b'diżabilità u mhux qed jaħdem.

# 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

Hawnhekk ser ninnota immedjatament li l-ħin tal-hardware huwa korrett: ikun aktar faċli li wieħed jinnaviga aktar.

Hawnhekk bdiet is-sensiela ta’ żbalji.

L-ewwel żball. Kunfidenza fik innifsek

Click-clack...

# 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

Kollox tajjeb, il-ħin huwa sinkronizzat, il-ħin tas-sistema jaqbel ma 'dak tal-hardware. "Ħuha," għedt u rritornajt għan-negozju tiegħi.

“Ħu xiex? - il-kollega kien indignant. "Huwa l-istess ħin!"

Iktar ma ssolvi problemi tipiċi, aktar il-ħsieb tiegħek isir blinker u ma tibqax taħseb li l-mitt jew elf sitwazzjoni se tkun differenti, iżda mhux din id-darba.

# 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

Il-ħin tas-sistema huwa ħażin mill-ġdid.

Ejja nerġgħu nippruvaw:

# 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

Ejja nagħmluha differenti:

# 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

U bħal dan:

# 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

Il-ħin huwa ssettjat għal qasma ta 'sekonda, u immedjatament jibda "għaġġla" mill-ġdid.

Fl-istess ħin, fir-zkuk, fil-ħin ta 'tali bidla manwali, naraw biss rapporti tas-sistema li l-ħin inbidel, rispettivament, fid-direzzjoni t-tajba/ħażina u okkażjonalment Sinkronizzazzjoni mill-ġdid minn 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

hawn

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

F'dan il-punt, kien diġà meħtieġ li tfittex ir-raġuni, iżda aktar minn 18-il sena ta 'amministrazzjoni, il-moħħ akkumula statistika dwar żbalji ta' "ħin" u, minn drawwa, għal darb'oħra twaħħal is-sinkronizzazzjoni.
Ejja nitfiha kompletament.

# 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

u fil-zkuk

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

Sinkronizzazzjoni mill-ġdid sparixxew u inkella z-zkuk huma verġni.

Iċċekkja l-konklużjonijiet tcpdump fuq il-port 123 fuq l-interfaces kollha. M'hemm l-ebda talbiet, iżda ż-żmien għadu għaddej.

Żball tnejn. Rush

Fadal siegħa sa tmiem il-ġimgħa tax-xogħol, u ma rridx nitlaq għal tmiem il-ġimgħa bi problema trivjali mhux solvuta (taqsux kas iż-żmien fil-kodiċi, l-artiklu nkiteb fil-jiem ta 'wara ).
U hawn għal darb'oħra, minflok infittex ir-raġuni, bdejt nipprova noħroġ bi spjegazzjoni għar-riżultat. Jien ngħid "nivvinta" għax tkun kemm tkun loġika l-ispjegazzjoni tar-riżultat, huwa approċċ difettuż biex tissolva l-problema.

Dan is-server huwa server ta 'streaming u jikkonverti n-nixxiegħa DVB-S2 f'IP. Il-fluss DVB-S fih timestamps, għalhekk riċevituri, multiplexers, scramblers u televiżjonijiet spiss jużawhom biex jissinkronizzaw l-arloġġ tas-sistema. Is-sewwieqa tal-bord DVB-S huma mibnija fil-qalba, għalhekk l-aktar mod mgħaġġel biex jiġi żgurat li l-fluss DVB-S2 jitneħħa huwa li skonnettja l-kejbils li ġejjin mill- "pjanċi". Fortunatament, is-server huwa wara l-ħajt, hekk ikun.

Naturalment, li kieku z-zkuk kien fihom x'għandu jkun hemm, dan ma kienx jiġri, iżda aktar dwar dan, għal darb'oħra, fl-aħħar tal-artiklu.

Ukoll, peress li diġà neħħejna s-sinjali kollha tas-satellita, se nneħħu wkoll dawk terrestri - fl-istess ħin noħorġu l-kejbils tan-netwerk kollha. Is-server jinqata' mid-dinja ta' barra u jaħdem b'mod kompletament awtonomu, iżda l-arloġġ tas-sistema għadu mgħaġġel.

Il-ġimgħa tax-xogħol spiċċat, u l-kwistjoni tad-data/ħin nnifisha mhix kritika, għalhekk tista 'sempliċement tmur id-dar, imma hawn nagħmel żball ġdid.

Żball tlieta. Konsulenti

Qatt! Qatt ma tistaqsi mistoqsijiet fuq forums u siti ġenerali speċjalizzati (a la stackoverflow) jekk it-tweġiba għaliha teħtieġ aktar milli tistudja l-ewwel paġna ta 'Google u taqra paġna man waħda.

Huma jibagħtulek lura lil Google, jaqraw l-istess raġel u jispjegaw b'mod popolari r-regoli tal-forum/sit, iżda mhux se jagħtuk risposta.

Hawn huma xi fatturi oġġettivi:

  • ħadd ħlief int jista’ jkun jaf il-problema wkoll;
  • ħadd ma jista’ jagħmel testijiet taħt l-istess kundizzjonijiet bħal tiegħek

u suġġettiv:

  • tista 'ma tagħtix l-input kollu biex issolvi l-problema, għax diġà ħriġt bid-direzzjoni "tajba" u qed tippreżenta l-essenza tal-kwistjoni li tiffoka fuqha;
  • il-foreman (moderatur, old-timer, admin) dejjem għandu raġun, jekk il-foreman ikun żbaljat... sew, taf...

Jekk, meta twieġeb għall-kummenti, bqajt fil-limiti tal-vokabularju ċensurat, allura għandek nervituri qawwija.

deċiżjoni

M'hemmx bżonn taqsam il-kompiti f'sempliċi u kumplessi.

Aħna nieqfu niddependu fuq l-esperjenza, l-istatistika, il-konsulenti tagħna u nibdew ma "jispjegawx" ir-riżultat aħħari, iżda nfittxu b'mod konsistenti r-raġuni.

Peress li xi ħadd jistabbilixxi l-ħin, is-sejħa tas-sistema korrispondenti trid isseħħ.

Hekk kif fid-dokumentazzjoni tas-softwer l-aħjar dokumenti huma s-sorsi, hekk fl-amministrazzjoni tas-sistema l-aħjar assistent huwa l-awditjar, fil-każ tagħna verifikati.

Mument ta’ dubjuGħaddejt mill-mana, iżda ma kontx kompletament ċert li l-ħin fil-Linux jista 'jiġi stabbilit biss clock_settime и setttimeofday, għalhekk għall-ewwel test għażilt is-sejħiet kollha "adattati":

# 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

u rimi s390_runtime_instr, stime, timerfd_create, li auditctl ma għarafhiex, inizjalment nediet verifika fil-forma:

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

Wara li niżgura li m'hemm l-ebda zkuk oħra fil-postijiet tal-log li jien interessat fihom syscalls Minbarra dawn it-tnejn, użajthom biss aktar.

Tmexxi verifika tas-sejħa tas-sistema clock_settime и setttimeofday u ipprova tbiddel id-data:

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

Jiżdied dewmien ta 'ħames sekondi sabiex il-"parassita" tagħna jkun garantit li jikkoreġi l-ħin.

Ejja nħarsu lejn ir-rapport:

# 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

Hawnhekk naraw tagħna data u mhux magħruf lilna chkcache_processes. Spiċċa fir-rapport ta 'hawn fuq minħabba li aureport agħżel l-output skond id-data meta kkonverti minn binarju, u l-avveniment seħħ fil-ħin li waqqafna data -s "2019-08-22 12:10:00".
Min wellidlu?

# 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 - il-parassita tagħna nstab. Minkejja l-imġieba "malizzjuża" tagħha, huwa impossibbli li tirrifjuta s-sistema ta 'aċċess kondizzjonali, iżda xorta nixtieq inkun naf oscam, WTF?

It-tweġiba tinsab malajr fi kodiċi tas-sors:

#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");
}

Kemm jidher ħelu hawn ikkummenta linja twissija...

Sors: www.habr.com

Żid kumment