Plis travay la pi senp, se pi souvan mwen fè erè

Plis travay la pi senp, se pi souvan mwen fè erè

Travay trivial sa a te leve yon Vandredi apremidi e li ta dwe pran 2-3 minit nan tan. An jeneral, kòm toujou.

Yon kòlèg te mande m 'ranje script la sou sèvè li a. Mwen te fè li, mwen te lonje l 'epi inadvèrtans te di: "Tan se 5 minit vit." Kite sèvè a okipe senkronizasyon an tèt li. Yon demi èdtan, yon èdtan pase, epi li te toujou gonfle ak tou dousman madichon.

“Estipid! - Mwen te panse, chanje nan konsole sèvè a - oke, mwen pral pran yon ti repo pou yon koup plis minit.

Ann wè ntp, rdate, sdwdate pa enstale timesyncd andikape epi yo pa kouri.

# 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

Isit la mwen pral imedyatman sonje ke tan an pyès ki nan konpitè kòrèk: li pral pi fasil navige pi lwen.

Sa a se kote seri a nan erè te kòmanse.

Premye erè a. Konfyans nan tet ou

Klike-klak...

# 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

Tout bagay anfòm, tan an senkronize, tan sistèm nan matche ak yon sèl pyès ki nan konpitè. "Pran li," mwen te di epi retounen nan biznis mwen an.

"Pran kisa? - kolèg la te endiye. "Se menm tan an!"

Plis ou rezoud pwoblèm tipik, se plis panse ou vin blije epi ou pa panse ke sitiyasyon an santyèm oswa milyèm pral diferan, men se pa fwa sa a.

# 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

Tan sistèm lan mal ankò.

Ann eseye ankò:

# 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

Ann fè li yon fason diferan:

# 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

Epi tankou sa a:

# 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

Tan an fikse pou yon dezyèm fwa, epi imedyatman kòmanse "prese" ankò.

An menm tan an, nan mòso bwa yo, nan moman sa a yon chanjman manyèl, nou wè sèlman rapò sistèm ke tan an te chanje, respektivman, nan bon / move direksyon ak detanzantan. Resyncing soti nan 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

isit la

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

Nan pwen sa a, li te deja nesesè yo gade pou rezon ki fè yo, men plis pase 18 ane nan administrasyon an, sèvo a akimile estatistik sou erè "tan" ak, soti nan abitid, ankò blame senkronizasyon.
Ann fèmen l nèt.

# 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

ak nan mòso bwa yo

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

Resyncing disparèt ak otreman mòso bwa yo primitif.

Tcheke konklizyon yo tcpdump sou pò 123 sou tout interfaces. Pa gen okenn demann, men tan toujou ap kouri ale.

Erè de. Rush

Gen yon èdtan ki rete jiska fen semèn travay la, epi mwen pa vle kite pou fen semèn nan ak yon trivial pwoblèm ki pa rezoud (pa peye atansyon sou tan ki nan kòd la, atik la te ekri nan jou sa yo. ).
Ak isit la ankò, olye pou yo chèche pou rezon an, mwen te kòmanse eseye vini ak yon eksplikasyon pou rezilta a. Mwen di "envante" paske kèlkeswa jan eksplikasyon lojik rezilta a ka ye, se yon apwòch defo pou rezoud pwoblèm nan.

Sèvè sa a se yon sèvè difizyon epi li konvèti kouran DVB-S2 nan IP. Kouran DVB-S la gen timestamps, kidonk récepteurs, multiplexeurs, scramblers ak televizyon souvan itilize yo pou senkronize revèy sistèm lan. Chofè tablo DVB-S yo bati nan nwayo a, kidonk fason ki pi rapid pou asire ke kouran DVB-S2 yo retire se dekonekte câbles ki soti nan "plak yo". Erezman, sèvè a se dèyè miray la, se konsa pou li.

Natirèlman, si mòso bwa yo te genyen sa ki ta dwe la, sa a pa ta rive, men plis sou sa, ankò, nan fen atik la.

Oke, depi nou deja retire tout siyal satelit yo, nou pral retire tou siyal terès yo - an menm tan nou rale tout kab rezo yo. Sèvè a vin koupe soti nan mond lan deyò epi li travay konplètman otonòm, men revèy la sistèm se toujou nan yon prese.

Semèn travay la fini, ak pwoblèm nan dat/lè tèt li pa kritik, kidonk ou ka jis ale lakay ou, men isit la mwen fè yon nouvo erè.

Erè twa. Konseye

Pa janm! Pa janm poze kesyon sou fowòm ak sit jeneral espesyalize (a la stackoverflow) si repons lan mande pou plis pase etidye premye paj Google ak li yon paj man.

Yo pral voye ou tounen nan Google, li menm moun ak popilè eksplike règ yo nan fowòm / sit la, men yo pa pral ba ou yon repons.

Men kèk faktè objektif:

  • pa gen moun eksepte ou ka konnen pwoblèm nan tou;
  • pèsonn pa ka fè tès nan menm kondisyon ak ou

ak subjectif:

  • ou ka pa bay tout opinyon pou rezoud pwoblèm nan, paske ou te deja vini ak "bon" direksyon an epi yo prezante sans nan pwoblèm nan konsantre sou li;
  • foreman (moderatè, old-timer, admin) toujou gen rezon, si kontremèt la mal... bon, ou konnen...

Si, lè w reponn kòmantè, ou rete nan limit vokabilè sansi, Lè sa a, ou gen nè fò.

desizyon

Pa gen okenn nesesite divize travay an senp ak konplèks.

Nou sispann konte sou eksperyans nou yo, estatistik, konseye yo epi yo kòmanse pa "eksplike" rezilta final la, men yo toujou gade pou rezon an.

Depi yon moun fikse lè a, apèl sistèm korespondan an dwe fèt.

Menm jan nan dokiman lojisyèl pi bon dokiman yo se sous yo, se konsa nan administrasyon sistèm pi bon asistan an se odit, nan ka nou an. auditd.

Yon moman doutMwen te ale nan mana a, men li pa t 'totalman asire w ke tan an nan Linux ka sèlman dwe mete clock_settime и settimeofday, Se konsa, pou premye tès la mwen te chwazi tout "apwopriye" apèl yo:

# 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

ak jete s390_runtime_instr, stime, timerfd_create, ki auditctl pa t 'rekonèt li, okòmansman te lanse yon odit nan fòm sa a:

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

Apre w fin asire w ke pa gen okenn lòt mòso bwa nan kote m enterese yo syscalls Anplis de sa yo, mwen te itilize sèlman yo pi lwen.

Kouri yon odit apèl sistèm clock_settime и settimeofday epi eseye chanje dat la:

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

Yon delè senk segonn ajoute pou ke "parazit" nou an garanti pou korije tan an.

Ann gade rapò a:

# 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

Isit la nou wè nou dat e nou pa konnen chkcache_process. Li te fini nan rapò ki anwo a paske aureport klase pwodiksyon an pa dat lè konvèti soti nan binè, ak evènman an te fèt nan moman nou te fikse a. dat -s "2019-08-22 12:10:00".
Kiyès ki fè l?

# 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 - yo te jwenn parazit nou an. Malgre konpòtman "move" li yo, li enposib refize sistèm aksè kondisyonèl la, men mwen ta toujou renmen konnen oscam, WTF?

Repons lan byen vit jwenn nan kòd sous:

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

Ala bèl li sanble isit la kòmante soti liy avètisman...

Sous: www.habr.com

Add nouvo kòmantè