Чӣ қадаре ки вазифа осонтар бошад, ман ҳамон қадар хато мекунам

Чӣ қадаре ки вазифа осонтар бошад, ман ҳамон қадар хато мекунам

Ин кори ночиз як нисфирӯзии ҷумъа ба миён омад ва бояд 2-3 дақиқа вақт мегирифт. Умуман, чун ҳамеша.

Як ҳамкорам аз ман хоҳиш кард, ки скриптро дар сервераш ислоҳ кунам. Ман ин корро кардам, онро ба ӯ додам ва нохост партофтам: "Вақт 5 дақиқа тез аст." Бигзор худи сервер синхронизатсияро идора кунад. Ним соат, як соат гузашт ва ӯ ҳамоно пуф карда, оромона дашном медод.

«Аҳмақ! "Ман фикр кардам, ки ба консоли сервер гузаштам - хуб, ман чанд дақиқаи дигар танаффус мекунам."

Биёед мебинем ntp, rdate, sdwdate насб нашудааст timesyncd маъюб ва кор намекунад.

# 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

Дар ин ҷо ман фавран қайд мекунам, ки вақти сахтафзор дуруст аст: паймоиши минбаъда осонтар мешавад.

Дар ин ҷо силсилаи хатогиҳо оғоз ёфт.

Аввалин хато. Эътимод ба худ

Клик-клик...

# 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

Ҳама чиз хуб аст, вақт ҳамоҳанг карда шудааст, вақти система ба сахтафзор мувофиқат мекунад. «Бигиред» гуфтам ва ба кори худ баргаштам.

«Чӣ бигиред? — хашмгин шуд хамкор. "Ин ҳамон вақт аст!"

Чӣ қадаре ки шумо масъалаҳои маъмулиро ҳал кунед, ҳамон қадар тафаккури шумо чашмак мезанад ва шумо дигар фикр намекунед, ки ҳолати садум ё ҳазорум дигар мешавад, аммо ин дафъа не.

# 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

Вақти система боз нодуруст аст.

Биёед бори дигар кӯшиш кунем:

# 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

Биёед онро ба таври дигар кунем:

# 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

Ва монанди ин:

# 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

Вақт барои як сония ҷудо карда мешавад ва дарҳол дубора ба "шитоб" оғоз мекунад.

Ҳамзамон, дар гузоришҳо, дар вақти чунин тағир додани дастӣ, мо танҳо гузоришҳои системаро мебинем, ки вақт мутаносибан ба самти дуруст / нодуруст ва баъзан тағир ёфтааст. Бозсозӣ аз 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

дар ин ҷо

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

Дар ин лаҳза, аллакай сабабро ҷустуҷӯ кардан лозим буд, аммо дар тӯли 18 соли маъмурият майна омори хатогиҳои "вақт" ҷамъоварӣ кардааст ва аз рӯи одат, боз ҳам синхронизатсияро айбдор мекунад.
Биёед онро комилан хомӯш кунем.

# 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

ва дар гузоришҳо

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

Бозсозӣ нопадид шуд ва дар акси ҳол, чӯбҳо тозаанд.

Санҷиши хулосаҳо tcpdump дар порти 123 дар ҳама интерфейсҳо. Дархост нест, аммо вақт то ҳол мегузарад.

Хатои дуюм. Шитоб

То ба охир расидани ҳафтаи корӣ як соат мондааст ва ман намехоҳам рӯзи истироҳат бо як масъалаи ночизи ҳалношуда равам (ба вақти дар код додашуда аҳамият надиҳед, мақола дар рӯзҳои баъдӣ навишта шудааст. ).
Ва дар ин ҷо, ман ба ҷои ҷустуҷӯи сабаб, ман кӯшиш кардам, ки шарҳи натиҷаро пайдо кунам. Ман "ихтироъ" мегӯям, зеро новобаста аз он ки шарҳи натиҷа то чӣ андоза мантиқӣ бошад ҳам, ин як равиши нодуруст барои ҳалли мушкилот аст.

Ин сервер сервери ҷараён аст ва ҷараёни DVB-S2-ро ба IP табдил медиҳад. Ҷараёни DVB-S дорои тамғаҳои вақт мебошад, аз ин рӯ қабулкунакҳо, мултиплексерҳо, скрамблерҳо ва телевизорҳо аксар вақт онҳоро барои ҳамоҳангсозии соати система истифода мебаранд. Драйверҳои тахтаи DVB-S дар ядро ​​сохта шудаанд, аз ин рӯ роҳи зудтарини нест кардани ҷараёни DVB-S2 ин ҷудо кардани кабелҳои аз "плитаҳо" меояд. Хушбахтона, сервер дар паси девор аст, ҳамин тавр бошад.

Албатта, агар дар гузоришҳо он чизе, ки бояд дар он ҷо бошад, ин тавр намешуд, аммо бештар дар бораи он, боз дар охири мақола.

Хуб, азбаски мо аллакай ҳама сигналҳои моҳвораиро нест кардаем, мо сигналҳои заминиро низ нест мекунем - дар айни замон мо ҳамаи кабелҳои шабакаро мекашем. Сервер аз ҷаҳони беруна қатъ мешавад ва комилан мустақил кор мекунад, аммо соати система то ҳол дар шитоб аст.

Ҳафтаи корӣ ба охир расид ва худи масъалаи сана/вақт муҳим нест, бинобар ин шумо метавонед ба хона равед, аммо дар ин ҷо ман хатои нав содир мекунам.

Хатои сеюм. Машваратчиён

Ҳеҷ гоҳ! Ҳеҷ гоҳ дар форумҳо ва сайтҳои махсуси (a la stackoverflow) савол надиҳед, агар ҷавоб ба он бештар аз омӯзиши саҳифаи аввали Google ва хондани як саҳифаи одамро талаб кунад.

Онҳо шуморо боз ба Google мефиристанд, ҳамон мардро мехонанд ва қоидаҳои форум/сайтро ба таври оммавӣ мефаҳмонанд, аммо ба шумо ҷавоб намедиҳанд.

Инҳоянд баъзе омилҳои объективӣ:

  • ба ҷуз ту касе наметавонад мушкилотро низ донад;
  • ҳеҷ кас наметавонад дар як шароите, ки шумо озмоишҳоро гузаронед

ва субъективӣ:

  • шумо метавонед барои ҳалли мушкилот тамоми саҳми худро надиҳед, зеро шумо аллакай як самти “дуруст”-ро пешниҳод кардаед ва моҳияти масъаларо ба он равона карда истодаед;
  • прораб (модератор, кухансол, админ) хамеша хак аст, агар прораб хато бошад... хуб, медонед...

Агар ҳангоми ҷавоб додан ба шарҳҳо шумо дар доираи луғати сензура боқӣ монда бошед, пас шумо асабҳои қавӣ доред.

ҳалли

Вазифаҳоро ба содда ва мураккаб тақсим кардан лозим нест.

Мо ба таҷриба, омор, мушовирони худ такя карданро бас мекунем ва на ба “шарҳ додани” натиҷаи ниҳоӣ, балки пайваста ҷустуҷӯи сабабро оғоз мекунем.

Азбаски касе вақтро муқаррар мекунад, занги мувофиқи система бояд сурат гирад.

Чӣ тавре ки дар ҳуҷҷатҳои нармафзор ҳуҷҷатҳои беҳтарин сарчашмаҳо мебошанд, дар идоракунии система беҳтарин ёвар аудит аст, дар ҳолати мо аудитд.

Як лаҳза шубҳаМан аз мана гузаштам, аммо комилан итминон надоштам, ки вақтро дар Linux танҳо муқаррар кардан мумкин аст соат_танзим и муқаррар кардани вақти рӯз, бинобар ин барои санҷиши аввал ман ҳамаи зангҳои "мувофиқ"-ро интихоб кардам:

# 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

ва партофтан s390_runtime_instr, stime, timerfd_create, ки auditctl эътироф накард, дар аввал аудитро дар шакли зерин оғоз кард:

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

Пас аз он ки боварӣ ҳосил кунед, ки дар маконҳои гузориш, ки ман ба онҳо таваҷҷӯҳ дорам, дигар гузоришҳо вуҷуд надоранд зарбаҳо Ба ғайр аз ин ду, ман танҳо онҳоро минбаъд истифода кардам.

Гузаронидани аудити занги система соат_танзим и муқаррар кардани вақти рӯз ва кӯшиш кунед, ки санаро тағир диҳед:

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

Панҷ сония таъхир илова карда мешавад, то "паразит" -и мо кафолати ислоҳи вақтро дошта бошад.

Биёед ба гузориш назар андозем:

# 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

Дар ин ҷо мо худамонро мебинем таърих ва ба мо номаълум chkcache_processes. Он дар гузориши дар боло зикршуда ба охир расид, зеро aureport баромадро аз рӯи сана ҳангоми табдилдиҳӣ аз бинарӣ мураттаб кард ва ҳодиса дар вақти муқарраркардаи мо рух дод. сана - s "2019-08-22 12:10:00".
Кӣ ӯро таваллуд кардааст?

# 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 — паразити мо ёфт шуд. Сарфи назар аз рафтори "зарарнок" -и он, рад кардани системаи дастрасии шартӣ ғайриимкон аст, аммо ман ба ҳар ҳол мехоҳам бидонам оскам, WTF?

Ҷавоб ба зудӣ дар он пайдо мешавад сарчашмахо:

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

Ин ҷо чӣ қадар зебо менамояд шарҳ дод хат огоҳӣ...

Манбаъ: will.com

Илова Эзоҳ