Tugas anu langkung sederhana, langkung sering kuring ngalakukeun kasalahan

Tugas anu langkung sederhana, langkung sering kuring ngalakukeun kasalahan

tugas trivial ieu timbul hiji Jumaah soré jeung kudu nyokot 2-3 menit waktu. Sacara umum, sakumaha salawasna.

A batur sapagawean nanya kuring ngalereskeun naskah dina server na. Kuring ngalakukeun éta, dipasrahkeun ka anjeunna sareng teu kahaja turun: "Waktosna 5 menit gancang." Hayu server nanganan sinkronisasi sorangan. Satengah jam, sajam kaliwat, sarta anjeunna masih puffed na quietly kutukan.

“Bodo! — Teu sangka, ngalih ka konsol server — oké, kuring badé istirahat sababaraha menit deui.

Urang tingali ntp, rdate, sdwdate teu dipasang kali ditumpurkeun jeung teu ngajalankeun.

# 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

Di dieu kuring bakal langsung perhatikeun yén waktos hardware leres: éta bakal langkung gampang pikeun nganapigasi langkung jauh.

Ieu tempat runtuyan kasalahan dimimitian.

Kasalahan kahiji. Kapercayaan diri

Klak-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

Sagalana henteu kunanaon, waktosna disingkronkeun, waktos sistem cocog sareng hardware. "Candak," ceuk kuring sarta balik ka bisnis kuring.

“Nyandak naon? - batur sapagawean éta indignant. "Ieu waktos anu sami!"

Beuki anjeun ngajawab masalah has, beuki pamikiran anjeun jadi blinkered jeung anjeun moal deui mikir yén kaayaan hundredth atawa sarébu bakal béda, tapi teu waktos ieu.

# 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

Sistem waktos salah deui.

Hayu urang cobian deui:

# 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

Hayu urang ngalakukeun eta béda:

# 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

Sareng sapertos kieu:

# 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

Waktosna disetél pikeun pamisah detik, sareng langsung mimiti "buru-buru" deui.

Dina waktos anu sami, dina log, dina waktos parobihan manual sapertos kitu, urang ngan ukur ningali sistem ngalaporkeun yén waktosna parantos robih, masing-masing, dina arah anu leres / salah sareng aya kalana. Nyingkronkeun deui ti 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

di dieu

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

Dina titik ieu, éta geus diperlukeun pikeun néangan alesan, tapi leuwih 18 taun administrasi otak geus akumulasi statistik dina kasalahan "waktos" na kaluar tina kabiasaan, deui blames sinkronisasi.
Hayu urang pareumkeun lengkep.

# 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

sarta dina log

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

Nyingkronkeun deui ngiles jeung disebutkeun log anu pristine.

Mariksa kacindekan tcpdump dina port 123 dina sakabéh interfaces. Henteu aya pamenta, tapi waktos masih kabur.

Kasalahan dua. Rurusuhan

Aya sajam ditinggalkeun nepi ka ahir minggu gawé, sarta kuring teu hayang ninggalkeun pikeun sabtu minggu jeung masalah trivial teu kaungkab (ulah nengetan waktu dina kode, artikel ieu ditulis dina poé saterusna. ).
Sareng di dieu deui, tibatan milarian alesanana, kuring mimiti nyobaan pikeun ngajelaskeun hasilna. Kuring nyebutkeun "invent" sabab euweuh urusan kumaha logis katerangan pikeun hasilna bisa jadi, éta pendekatan flawed mun ngarengsekeun masalah.

Server ieu mangrupikeun server streaming sareng ngarobih aliran DVB-S2 ka IP. Aliran DVB-S ngandung cap waktu, ku kituna panarima, multiplexer, scramblers jeung televisi mindeng ngagunakeun eta pikeun nyingkronkeun jam sistem. Panggerak dewan DVB-S diwangun kana kernel, jadi cara panggancangna pikeun mastikeun yén aliran DVB-S2 dihapus nyaéta megatkeun sambungan kabel datang ti "pelat". Untungna, server aya di tukangeun témbok, jadi kitu.

Tangtosna, upami log parantos ngandung naon anu kedah aya, ieu moal kajantenan, tapi langkung seueur ngeunaan éta, deui, dina tungtung tulisan.

Nya, sabab kami parantos ngahapus sadaya sinyal satelit, kami ogé bakal ngahapus sinyal terestrial - dina waktos anu sami urang cabut sadaya kabel jaringan. server jadi neukteuk off ti dunya luar jeung jalan lengkep autonomously, tapi jam sistem masih rusuh.

Minggu gawé téh leuwih, sarta tanggal / masalah waktos sorangan teu kritis, jadi Anjeun ngan bisa balik ka imah, tapi didieu kuring nyieun kasalahan anyar.

Kasalahan tilu. Panaséhat

moal pernah! Pernah naroskeun patarosan dina panglawungan sareng situs khusus umum (a la stackoverflow) upami jawabanana peryogi langkung seueur tibatan diajar halaman mimiti Google sareng maca hiji halaman lalaki.

Aranjeunna bakal dikirim deui ka Google, baca lalaki sarua jeung populér ngajelaskeun aturan forum / situs, tapi moal masihan anjeun jawaban.

Ieu sababaraha faktor obyektif:

  • teu saurang ogé iwal anjeun bisa nyaho masalah ogé;
  • teu aya anu tiasa ngalaksanakeun tés dina kaayaan anu sami sareng anjeun

jeung subjektif:

  • Anjeun bisa jadi teu masihan sagala input pikeun ngarengsekeun masalah, sabab anjeun geus datang nepi ka arah "katuhu" na presenting hakekat masalah fokus kana eta;
  • mandor (moderator, old-timer, admin) sok bener, mun mandor lepat... muhun kang...

Upami, nalika ngawalon koméntar, anjeun tetep dina wates kosakata anu disensor, maka anjeun ngagaduhan saraf anu kuat.

kaputusan

Teu perlu ngabagi tugas kana basajan tur kompléks.

Urang eureun ngandelkeun pangalaman urang, statistik, Advisors sareng ngawitan teu "ngajelaskeun" hasil ahir, tapi mun konsistén néangan alesan.

Kusabab aya anu nyetél waktosna, telepon sistem anu saluyu kedah lumangsung.

Sapertos dina dokuméntasi parangkat lunak, dokumén anu pangsaéna mangrupikeun sumber, janten dina administrasi sistem, asistén pangsaéna nyaéta audit, dina kasus urang diaudit.

Sakedapan cangcayaKuring indit ngaliwatan mana, tapi teu sagemblengna yakin yén waktu di Linux Ubuntu ngan bisa diatur clock_settime и settimeofday, janten pikeun tés munggaran kuring milih sadaya sauran "cocog":

# 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

jeung miceun s390_runtime_instr, stime, timerfd_create, anu auditctl henteu ngakuan éta, mimitina ngaluncurkeun audit dina bentuk:

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

Saatos mastikeun yén teu aya log sanés dina lokasi log anu kuring resep baling-baling Salian dua ieu, kuring ngan ukur nganggo aranjeunna langkung jauh.

Ngajalankeun audit sistem panggero clock_settime и settimeofday sareng cobian gentos tanggalna:

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

A reureuh lima detik ditambahkeun ambéh urang "parasit" dijamin pikeun ngabenerkeun waktu.

Hayu urang tingali laporan:

# 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

Di dieu urang ningali urang kaping jeung kanyahoan ku urang chkcache_processes. Ieu réngsé dina laporan di luhur sabab aureport diurutkeun kaluaran dumasar titimangsa nalika ngarobah tina binér, sarta acara lumangsung dina waktu urang nyetél. tanggal -s "2019-08-22 12:10:00".
Saha anu ngalahirkeun anjeunna?

# 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 - parasit urang geus kapanggih. Sanajan kabiasaan "jahat" na, mustahil pikeun nolak sistem aksés kondisional, tapi kuring masih hoyong terang oscam, WTF?

Jawaban gancang kapanggih dina sumber:

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

Kumaha imut katingalina di dieu commented kaluar garis peringatan...

sumber: www.habr.com

Tambahkeun komentar