Iji strace na-arụ ọrụ nbibi software

Iji strace na-arụ ọrụ nbibi software

Ọrụ ụbọchị m na-abụkarị ibunye ngwanrọ, nke pụtara na m na-etinye oge dị ukwuu na-agbalị ịza ajụjụ ndị dị ka:

  • Akụrụngwa a na-arụ ọrụ maka onye nrụpụta, mana ọ bụghị maka m. Gịnị kpatara?
  • Ụnyaahụ software a rụrụ m ọrụ, ma taa ọ naghị arụ ọrụ. Gịnị kpatara?

Nke a bụ ụdị nbipu nke dịtụ iche na nbibi ngwanro mgbe niile. Ndozigharị mgbe niile bụ maka mgbagha nke koodu ahụ, mana nbibi mbugharị bụ maka mmekọrịta dị n'etiti koodu na gburugburu ebe obibi. Ọ bụrụgodị na ihe kpatara nsogbu ahụ bụ njehie ezi uche dị na ya, eziokwu ahụ bụ na ihe niile na-arụ ọrụ n'otu igwe ma ọ bụghị na nke ọzọ pụtara na nsogbu ahụ dị na gburugburu ebe obibi.

Ya mere, kama nke a na-emebu debugging ngwaọrụ dị ka gdb Enwere m ngwaọrụ dị iche iche maka nbinye mbugharị. Na ngwá ọrụ ọkacha mmasị m maka ịnagide nsogbu dị ka "Gịnị kpatara na ngwanrọ a anaghị arụ ọrụ maka m?" akpọ eriri.

Kedu ihe bụ strace?

eriri bụ ngwá ọrụ maka "nchọgharị oku usoro". Emebere ya maka Linux na mbụ, mana enwere ike iji ngwaọrụ maka sistemụ ndị ọzọ mee otu aghụghọ aghụghọ ahụ.DTrace ma ọ bụ ktrace).

Ngwa bụ isi dị nnọọ mfe. Naanị ị ga-eji iwu ọ bụla na-agba strace na ọ ga-atụfu oku sistemụ (ọ bụ ezie na mbụ ị ga-etinyerịrị ya n'onwe gị). eriri):

$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6)                  = 6
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Gịnị bụ oku sistemu ndị a? Nke a bụ ihe dị ka API maka kernel sistemụ arụmọrụ. N'otu oge, ngwanrọ nwere ohere ozugbo na ngwaike ọ na-arụ ọrụ. Ọ bụrụ na, dịka ọmụmaatụ, ọ dị mkpa igosi ihe na ihuenyo, ọ na-eji ọdụ ụgbọ mmiri ma ọ bụ ihe ndekọ nke ebe nchekwa maka ngwaọrụ vidiyo na-egwuri egwu. Mgbe sistemụ kọmputa na-arụ ọtụtụ ọrụ ghọrọ ewu ewu, ọgba aghara chịrị ka ngwa dị iche iche na-alụ ọgụ maka ngwaike. Njehie n'otu ngwa nwere ike wedata ndị ọzọ, ma ọ bụrụ na ọ bụghị sistemụ niile. Mgbe ahụ ụdị ihe ùgwù (ma ọ bụ "mkpuchi mgbanaka") pụtara na CPU. The kernel ghọrọ ihe kacha nwee ihe ùgwù: ọ nwetara ohere zuru ezu na ngwaike, na-emepụta ngwa ndị nwere obere ohere nke na-arịọrịrị ịnweta site na kernel iji soro ngwaike na-emekọrịta ihe site na oku sistemụ.

Na ọkwa ọnụọgụ abụọ, oku sistemụ dịtụ iche na oku ọrụ dị mfe, mana ọtụtụ mmemme na-eji ihe mkpuchi na ọba akwụkwọ ọkọlọtọ. Ndị ahụ. Ọbá akwụkwọ ọkọlọtọ POSIX C nwere oku ọrụ dee (), nke nwere koodu ụkpụrụ ụlọ niile maka oku sistemụ dee.

Iji strace na-arụ ọrụ nbibi software

Na nkenke, mmekọrịta ọ bụla n'etiti ngwa na gburugburu ya (sistemu kọmputa) na-eme site na oku usoro. Ya mere, mgbe ngwanrọ na-arụ ọrụ n'otu igwe ma ọ bụghị na nke ọzọ, ọ ga-adị mma ileba anya na nsonaazụ oku na-akpọ usoro. Kpọmkwem, ebe a bụ ndepụta isi ihe enwere ike nyochaa site na iji usoro oku usoro:

  • Console I/O
  • Netwọk I/O
  • Nweta sistemụ faịlụ na faịlụ I/O
  • Ijikwa oge ndụ nke eriri usoro
  • Njikwa ebe nchekwa dị ala
  • Ịnweta ndị ọkwọ ụgbọala ngwaọrụ akọwapụtara

Kedu mgbe a ga-eji strace?

Na tiori, eriri ejiri ya na mmemme ọ bụla na oghere onye ọrụ, n'ihi na mmemme ọ bụla dị na oghere onye ọrụ ga-emerịrị oku sistemụ. Ọ na-arụ ọrụ nke ọma na mmemme chịkọtara, nke dị ala, mana ọ na-arụkwa ọrụ na asụsụ dị elu dị ka Python ma ọ bụrụ na ị nwere ike belata mkpọtụ ọzọ site na oge na-agba ọsọ na onye ntụgharị.

N'ebube ya niile eriri na-egosipụta onwe ya n'oge debugging nke software nke na-arụ ọrụ nke ọma na otu igwe, ma na mberede kwụsịrị ịrụ ọrụ na ọzọ, na-emepụta ozi na-edoghị anya banyere faịlụ, ikike, ma ọ bụ mgbalị na-emeghị nke ọma ime ihe ụfọdụ iwu ma ọ bụ ihe ọzọ ... Ọ bụ ihe nwute, ma ọ dịghị. jikọta nke ọma na nsogbu ọkwa dị elu dị ka mperi nkwenye akwụkwọ. Na-emekarị nke a na-achọ ngwakọta eririmgbe ụfọdụ ụzọ na ngwaọrụ ọkwa dị elu (dị ka ngwá ọrụ ahịrị iwu openssl iji debug akwụkwọ).

Anyị ga-eji ihe nkesa kwụụrụ onwe ya dị ka ọmụmaatụ, mana enwere ike ịme nchọta oku sistemụ na nyiwe ibunye ndị siri ike karị. Naanị ị ga-ahọrọ ngwaọrụ kwesịrị ekwesị.

Ihe atụ nzizi dị mfe

Ka anyị kwuo na ịchọrọ ịgba ọsọ ngwa ngwa sava dị ịtụnanya, nke a bụ ihe ị mechiri:

$ foo
Error opening configuration file: No such file or directory

O doro anya na ọ nweghị ike ịhụ faịlụ nhazi nke ị dere. Nke a na-eme n'ihi na mgbe ụfọdụ mgbe ndị njikwa ngwugwu na-achịkọta ngwa, ha na-akagbu ebe faịlụ a na-atụ anya ya. Ma ọ bụrụ na ị na-agbaso ntuziaka nwụnye maka otu nkesa, na nke ọzọ ị ga-ahụ faịlụ dị nnọọ iche na ebe ị tụrụ anya ya. Enwere ike idozi nsogbu ahụ n'ime sekọnd ole na ole ma ọ bụrụ na ozi njehie gwara ebe a ga-achọ faịlụ nhazi, mana ọ bụghị. Ya mere ebee ka anya?

Ọ bụrụ na ị nwere ike ịnweta koodu isi mmalite, ị nwere ike ịgụ ya wee chọpụta ihe niile. Atụmatụ ndabere dị mma, mana ọ bụghị ngwọta kachasị ngwa ngwa. Ị nwere ike ịmalite iji nzọụkwụ-site-nzọụkwụ nkwụsị dị ka gdb wee hụ ihe mmemme a na-eme, mana ọ ka mma iji ngwa ọrụ emebere iji gosipụta mmekọrịta na gburugburu ebe obibi: eriri.

nkwubi eriri nwere ike iyi ihe na-abaghị uru, ma ozi ọma ahụ bụ na a pụrụ ileghara ọtụtụ n'ime ya anya n'enweghị nsogbu. Ọ na-abakarị uru iji onye ọrụ -o chekwaa nsonaazụ ọchụchọ na faịlụ dị iche:

$ strace -o /tmp/trace foo
Error opening configuration file: No such file or directory
$ cat /tmp/trace
execve("foo", ["foo"], 0x7ffce98dc010 /* 16 vars */) = 0
brk(NULL)                               = 0x56363b3fb000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25186, ...}) = 0
mmap(NULL, 25186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2f12cf1000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 > 1 260A2 "..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2f12cef000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2f12b2e000
mprotect(0x7f2f12b50000, 1658880, PROT_NONE) = 0
mmap(0x7f2f12b50000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f2f12b50000
mmap(0x7f2f12c98000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f2f12c98000
mmap(0x7f2f12ce5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f2f12ce5000
mmap(0x7f2f12ceb000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2f12ceb000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f2f12cf0500) = 0
mprotect(0x7f2f12ce5000, 16384, PROT_READ) = 0
mprotect(0x56363b08b000, 4096, PROT_READ) = 0
mprotect(0x7f2f12d1f000, 4096, PROT_READ) = 0
munmap(0x7f2f12cf1000, 25186)           = 0
openat(AT_FDCWD, "/etc/foo/config.json", O_RDONLY) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
brk(NULL)                               = 0x56363b3fb000
brk(0x56363b41c000)                     = 0x56363b41c000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x8), ...}) = 0
write(3, "Error opening configuration file"..., 60) = 60
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Ihe dị ka akụkụ mbụ nke mmepụta eriri - Nke a na-abụkarị nkwadebe dị ala maka mmalite. (Ọtụtụ oku mmap, imeghari, quill maka ihe dị ka ịchọpụta ebe nchekwa dị ala na igosipụta ọba akwụkwọ dị ike.) N'ezie, n'oge debugging mmepụta eriri Ọ ka mma ịgụ site na njedebe. A ga-enwe ihe ịma aka n'okpuru dee, nke na-egosiputa ozi njehie. Anyị na-ele anya n'elu wee hụ oku usoro njehie mbụ - oku imeghe, nke na-atụfu njehie ENOENT ("faịlụ ma ọ bụ ndekọ ahaghị") na-agbalị imeghe /etc/foo/config.json. Nke a bụ ebe faịlụ nhazi kwesịrị ịdị.

Nke a bụ naanị ọmụmaatụ, mana m ga-ekwu 90% nke oge m na-eji eriri, ọ dịghị ihe siri ike ime karịa nke a. N'okpuru bụ ntuziaka nbizi nzọụkwụ site na nzọụkwụ zuru ezu:

  • Were iwe n'ihi ozi na-edoghị anya gbasara njehie sistemu-y sitere na mmemme
  • Jiri malitegharịa mmemme ahụ eriri
  • Chọta ozi mperi na nsonaazụ ọchụchọ
  • Gaa n'elu ruo mgbe ị kụrụ oku sistemụ mbụ dara

O yikarịrị ka oku sistemụ na nzọụkwụ 4 ga-ekpughe ihe na-ezighi ezi.

Ndụmọdụ

Tupu igosi gị ihe atụ nke nbibi dị mgbagwoju anya, m ga-egosi gị aghụghọ ole na ole maka iji dị irè eriri:

nwoke bu enyi gi

N'ọtụtụ * sistemụ nix, enwere ike nweta ndepụta oku sistemu na kernel site na ịgba ọsọ nwoke syscalls. Ị ga-ahụ ihe ndị dị ka brk (2), nke pụtara na enwere ike nweta ozi ndị ọzọ site na ịgba ọsọ nwoke 2 brk.

Obere akpa: nwoke 2 ndụdụ na-egosi m ibe maka shei ahụ ndụdụ () в GNU libc, nke, ọ na-apụta, na-emejuputa ya site na ịkpọ oku clone(). Kpọọ semantik ndụdụ na-anọgide otu ma ọ bụrụ na ị na-eji a dee mmemme ndụdụ (), wee mee trace - agaghị m ahụ oku ọ bụla ndụdụ, kama ha a ga-enwe clone(). Rakes dị otú ahụ na-agbagwoju gị anya ma ọ bụrụ na ịmalite ịtụnyere isi mmalite na mmepụta eriri.

Jiri -o iji chekwaa mmepụta na faịlụ

eriri nwere ike ịmepụta nnukwu mmepụta, ya mere ọ na-abakarị uru ịchekwa nsonaazụ ọchụchọ na faịlụ dị iche iche (dịka ọmụmaatụ n'elu). Nke a na-enyekwara aka iji zere mmepụta mmemme mgbagwoju anya na mmepụta eriri na console.

Jiri -s ka ịlele data arụmụka ọzọ

O nwere ike ịbụ na ị chọpụtala na ọkara nke abụọ nke ozi njehie ahụ egosighi na akara ngosi dị n'elu. Ọ bụ n'ihi eriri ndabara na-egosi naanị 32 bytes mbụ nke arụmụka eriri. Ọ bụrụ na ịchọrọ ịhụkwu, tinye ihe dịka -a 128 na oku eriri.

-y na-eme ka ọ dị mfe soro faịlụ, sọket, wdg.

"Ihe niile bụ faịlụ" pụtara na * sistemụ nix na-eme I/O niile site na iji nkọwa faịlụ, ma nke ahụ metụtara faịlụ ma ọ bụ netwọkụ ma ọ bụ ọkpọkọ interprocess. Nke a dị mma maka mmemme, mana ọ na-eme ka o sie ike idobe ihe na-eme n'ezie mgbe ị na-ahụ ihe a na-ahụkarị agụ и dee n'ime usoro oku nchọta nsonaazụ.

Site na ịgbakwunye onye ọrụ ee, ị ga-amanye eriri kọwapụta onye na-akọwa faịlụ ọ bụla na mmepụta na ndetu ihe ọ na-arụtụ aka na ya.

Tinye na usoro na-agba ọsọ na-p ***

Dị ka ị ga-ahụ site na ihe atụ dị n'okpuru ebe a, mgbe ụfọdụ ị ga-achọ ịchọta mmemme na-agba ọsọ. Ọ bụrụ na a maara na ọ na-agba ọsọ dị ka usoro 1337 (sịnụ, site na mmepụta ps), mgbe ahụ ị nwere ike ịchọta ya dị ka nke a:

$ strace -p 1337
...system call trace output...

Ị nwere ike ịchọrọ ikike mgbọrọgwụ.

Jiri -f nyochaa usoro ụmụaka

eriri Site na ndabara, ọ na-achọpụta naanị otu usoro. Ọ bụrụ na usoro a na-emepụta usoro ụmụaka, mgbe ahụ, a ga-ahụ usoro oku maka spawn usoro nwatakịrị ahụ, ma a gaghị egosipụta oku usoro nwatakịrị ahụ.

Ọ bụrụ na ị chere na njehie ahụ dị na usoro ụmụaka, jiri nkwupụta ahụ -f, nke a ga-enyere aka ịchọta ya. Ihe dị ala na nke a bụ na mmepụta ga-agbagwoju gị anya ọbụna karị. Mgbe ole eriri na-achọpụta otu usoro ma ọ bụ otu eri, ọ na-egosi otu iyi nke mmemme oku. Mgbe ọ na-achọpụta ọtụtụ usoro n'otu oge, ịnwere ike ịhụ mmalite oku ka ozi kwụsịrị , mgbe ahụ - ụyọkọ oku maka alaka ndị ọzọ na-egbu egbu, ma naanị - njedebe nke mbụ <...foocal maliteghachiri>. Ma ọ bụ kewaa nsonaazụ ọchụchọ niile ka ọ bụrụ faịlụ dị iche iche, na-ejikwa onye ọrụ -ff (nkọwa na ndu on eriri).

Wepụta akara site na iji -e

Dị ka ị pụrụ ịhụ, nsonaazụ nke nchọta bụ ezigbo ikpo oku usoro niile enwere ike. Ọkọlọtọ -e Ị nwere ike nzacha akara ahụ (lee njikwa on eriri). Isi uru bụ na ọ na-agba ọsọ ọsọ ọsọ na-agba ọsọ nzacha karịa ime nyocha zuru ezu na mgbe ahụ grep'na. N'ikwu eziokwu, ọ fọrọ nke nta ka ọ bụrụ mgbe niile anaghị m eche.

Ọ bụghị mmejọ niile dị njọ

Ihe atụ dị mfe na nke a na-ahụkarị bụ mmemme na-achọ faịlụ n'ọtụtụ ebe n'otu oge, dị ka shei na-achọ ndekọ nke nwere faịlụ nwere ike ime:

$ strace sh -c uname
...
stat("/home/user/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/bin/uname", {st_mode=S_IFREG|0755, st_size=39584, ...}) = 0
...

Heuristics dị ka "arịrịọ ikpeazụ dara tupu ịkọ njehie" dị mma n'ịchọta mperi dị mkpa. Otú ọ dị, ọ bụ ihe ezi uche dị na ya ịmalite site na njedebe.

Nkuzi mmemme C nwere ike inyere gị aka ịghọta oku sistemụ.

Oku ọkọlọtọ na ọba akwụkwọ C abụghị oku sistemụ, kama ọ bụ naanị oyi akwa dị mkpa. Ya mere, ọ bụrụ na ị ghọtara ma ọ dịkarịa ala otu esi eme na ihe ị ga-eme na C, ọ ga-adịrị gị mfe ịghọta nsonaazụ nke usoro oku usoro. Dịka ọmụmaatụ, ị nwere nsogbu ịmegharị oku na sistemụ netwọkụ, lelee otu kpochapụ Ntuziaka Bija na mmemme netwọk.

Ihe atụ nbibi dị mgbagwoju anya

Ekwuru m na ihe atụ nke nbibi dị mfe bụ ihe atụ nke ihe m na-ejikarị eme ihe mgbe ị na-arụ ọrụ eriri. Agbanyeghị, mgbe ụfọdụ a na-achọ ezigbo nyocha, yabụ nke a bụ ihe atụ n'ezie nke nbipu ka ukwuu.

bcron - nhazi nhazi ọrụ, mmejuputa ọzọ nke * nix daemon cron. Awụnyere ya na ihe nkesa, mana mgbe mmadụ nwara idezi usoro ihe omume, nke a bụ ihe na-eme:

# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file

Ọ dị mma, nke ahụ pụtara bcron gbalịrị ide otu faịlụ, ma ọ naghị arụ ọrụ, ọ gaghịkwa ekweta ihe kpatara ya. Na-ekpughe eriri:

# strace -o /tmp/trace crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
# cat /tmp/trace
...
openat(AT_FDCWD, "bcrontab.14779.1573691864.847933", O_RDONLY) = 3
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
read(3, "#Ansible: logsaggn20 14 * * * lo"..., 8192) = 150
read(3, "", 8192)                       = 0
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/bcron-spool"}, 110) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
write(3, "156:Slogs #Ansible: logsaggn20 1"..., 161) = 161
read(3, "32:ZCould not create temporary f"..., 8192) = 36
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
write(2, "bcrontab: Fatal: Could not creat"..., 49) = 49
unlink("bcrontab.14779.1573691864.847933") = 0
exit_group(111)                         = ?
+++ exited with 111 +++

Enwere ozi njehie dị nso na njedebe dee, ma na nke ugbu a, ọ dị ihe dị iche. Nke mbụ, ọ dịghị mkpa usoro oku njehie, nke na-emekarị tupu nke a. Nke abụọ, o doro anya na ebe mmadụ agụọla ozi njehie ahụ. Ọ dị ka ezigbo nsogbu bụ ebe ọzọ, na bcrontab naanị na-akpọghachi ozi ahụ.

Ọ bụrụ na ị na-ele anya nwoke 2 gụrụ, ị nwere ike ịhụ na arụmụka mbụ (3) bụ nkọwa faịlụ, nke * nix na-eji maka nhazi I / O niile. Kedu ka m ga-esi chọpụta ihe nkọwa faịlụ 3 na-anọchi anya? N'okwu a, ị nwere ike ịgba ọsọ eriri ya na onye ọrụ ee (lee n'elu) na ọ ga-agwa gị na-akpaghị aka, mana iji chọpụta ihe ndị dị otú a, ọ bara uru ịmara ka esi agụ na nyochaa nsonaazụ ọchụchọ.

Isi mmalite nke onye na-akọwa faịlụ nwere ike ịbụ otu n'ime ọtụtụ oku usoro (ọ dabere na ihe onye na-akọwa ya bụ - console, oghere netwọk, faịlụ ahụ n'onwe ya, ma ọ bụ ihe ọzọ), ma ọ bụrụ na ọ nwere ike, anyị na-achọ. oku site na ịlaghachi 3 (yabụ, anyị na-achọ "= 3" na nsonaazụ ọchụchọ). Na nsonaazụ a, e nwere 2 n'ime ha: imeghe n'ụzọ zuru oke na anya N'etiti. imeghe mepee faịlụ mana nso(3) ga-egosikwa na ọ na-emechi ọzọ. (Rake: Enwere ike iji ihe nkọwa faịlụ mee ihe mgbe emepere ma mechie ha). Kpọọ anya () dabara n'ihi na ọ bụ nke ikpeazụ tupu gụọ (), ma ọ pụtakwara na bcrontab na-arụ ọrụ na ihe site na oghere. Ahịrị na-esote na-egosi na ejikọtara onye na-akọwa faịlụ oghere ngalaba unix nọ n'ụzọ /var/run/bcron-spool.

Yabụ, anyị kwesịrị ịchọta usoro ejikọtara ya oghere unix n'akụkụ nke ọzọ. Enwere ụzọ aghụghọ dị mma maka ebumnuche a, nke abụọ bara uru maka debugging nkesa nkesa. Nke mbụ bụ iji netstat ma ọ bụ nke ọhụrụ ss (ọkwa oghere). Iwu abụọ a na-egosi njikọ netwọkụ sistemụ na-arụ ọrụ wee were nkwupụta ahụ -l iji kọwaa oghere ndị na-ege ntị, yana onye ọrụ -p iji gosipụta mmemme ejikọrọ na oghere dịka onye ahịa. (E nwere ọtụtụ nhọrọ bara uru, mana abụọ ndị a zuru ezu maka ọrụ a.)

# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0   128   /var/run/bcron-spool 1466637   * 0   users:(("unixserver",pid=20629,fd=3))

Nke a na-egosi na onye na-ege ntị bụ iwu sava inix, Na-agba ọsọ na usoro ID 20629. (Na, na mberede, ọ na-eji faịlụ nkọwa 3 dị ka oghere.)

A na-akpọ ngwá ọrụ nke abụọ bara uru maka ịchọta otu ozi ahụ Nkechi. Ọ na-edepụta faịlụ niile mepere emepe (ma ọ bụ nkọwa faịlụ) na sistemụ. Ma ọ bụ ị nwere ike nweta ozi gbasara otu faịlụ akọwapụtara:

# lsof /var/run/bcron-spool
COMMAND   PID   USER  FD  TYPE  DEVICE              SIZE/OFF  NODE    NAME
unixserve 20629 cron  3u  unix  0x000000005ac4bd83  0t0       1466637 /var/run/bcron-spool type=STREAM

Usoro 20629 bụ ihe nkesa dị ogologo, yabụ ị nwere ike itinye ya na ya eriri iji ihe dika strace -o /tmp/trace -p 20629. Ọ bụrụ na ị dezie ọrụ cron na ọdụ ọzọ, ị ga-enweta nsonaazụ traktị nwere mperi. Ma ebe a bụ nsonaazụ:

accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21181
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21181, si_uid=998, si_status=0, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WSTOPPED, NULL) = 21181
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21200
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21200, si_uid=998, si_status=111, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 111}], WNOHANG|WSTOPPED, NULL) = 21200
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL

(Ikpeazụ nabata () agaghị agwụ agwụ mgbe ị na-achọ.) Ọzọ, ọ dị mwute ikwu, nsonaazụ a enweghị njehie anyị na-achọ. Anyị ahụghị ozi ọ bụla bcrontag na-ezigara ma ọ bụ nata site na oghere. Kama, njikwa usoro zuru ezu (mmepụta oyiri, chere4, SIGCHLD wdg) Usoro a na-ebute usoro ụmụaka, nke, dịka ị nwere ike iche, na-arụ ọrụ n'ezie. Ma ọ bụrụ na ịchọrọ ijide ụzọ ya, gbakwunye na oku ahụ eriri -f. Nke a bụ ihe anyị ga-ahụ mgbe anyị jiri strace chọọ ozi njehie na nsonaazụ ọhụrụ -f -o /tmp/trace -p 20629:

21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

Ugbu a, nke ahụ bụ ihe. Usoro 21470 na-enweta njehie "mbanye anabatara" mgbe ị na-agbalị ịmepụta faịlụ na ụzọ tmp/spool.21470.1573692319.854640 (nke metụtara akwụkwọ ndekọ aha ugbu a). Ọ bụrụ na anyị maara naanị akwụkwọ ndekọ aha na-arụ ọrụ ugbu a, anyị ga-amakwa ụzọ zuru ezu ma nwee ike ịchọpụta ihe kpatara na usoro ahụ enweghị ike ịmepụta faịlụ nwa oge ya n'ime ya. Ọ dị nwute, usoro apụọlarị, yabụ ị nweghị ike iji ls nke -p 21470 iji chọta akwụkwọ ndekọ aha ugbu a, mana ị nwere ike ịrụ ọrụ n'akụkụ ọzọ - chọọ oku usoro PID 21470 na-agbanwe ndekọ ahụ. (Ọ bụrụ na enweghị nke ọ bụla, PID 21470 ga-eketarịrị ha n'aka nne na nna ya, nke a adịlarị. nke -p enweghị ike ịchọpụta.) Oku usoro a bụ chdir (nke dị mfe ịchọta site n'enyemaka nke igwe nchọta n'ịntanetị nke oge a). Na nke a bụ nsonaazụ ọchụchọ ntụgharị dabere na nsonaazụ ọchụchọ, ruo na PID 20629 nkesa:

20629 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21470
...
21470 execve("/usr/sbin/bcron-spool", ["bcron-spool"], 0x55d2460807e0 /* 27 vars */) = 0
...
21470 chdir("/var/spool/cron")          = 0
...
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

(Ọ bụrụ na ị furu efu, ị nwere ike ịchọrọ ịgụ akwụkwọ m gara aga banyere * njikwa usoro nix na shells.) Ya mere, ihe nkesa PID 20629 enwetaghị ikike ịmepụta faịlụ na ụzọ /var/spool/cron/tmp/spool.21470.1573692319.854640. O yikarịrị, ihe kpatara nke a bụ ntọala ikike sistemụ faịlụ kpochapụwo. Ka anyị lelee:

# ls -ld /var/spool/cron/tmp/
drwxr-xr-x 2 root root 4096 Nov  6 05:33 /var/spool/cron/tmp/
# ps u -p 20629
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cron     20629  0.0  0.0   2276   752 ?        Ss   Nov14   0:00 unixserver -U /var/run/bcron-spool -- bcron-spool

Ọ bụ ebe ahụ ka e liri nkịta! Ihe nkesa na-agba ọsọ dị ka cron onye ọrụ, mana naanị mgbọrọgwụ nwere ikike ide na ndekọ /var/spool/cron/tmp/. Iwu dị mfe chown cron /var/spool/cron/tmp/ ga-amanye bcron rụọ ọrụ nke ọma. (Ọ bụrụ na nke ahụ abụghị nsogbu ahụ, mgbe ahụ onye ọzọ a na-enyo enyo bụ modul nchekwa kernel dị ka SELinux ma ọ bụ AppArmor, yabụ m ga-elele ndekọ ozi kernel na ya. Dmesg.)

Ọnụ

Oku oku sistemu nwere ike buru oke ibu maka onye mbido, mana enwere m olile anya na egosila m na ha bụ ụzọ dị ngwa iji mebie otu klas nke nsogbu nnabata nkịtị. Were ya na ị na-agbalị idozi a multiprocess bcroniji nbibi nzọụkwụ site na nzọụkwụ.

Nyochaa nsonaazụ azụ azụ yana usoro oku sistemụ chọrọ nka, mana dịka m kwuru, ọ fọrọ nke nta ka ọ bụrụ mgbe niile, iji eriri, M na-enweta nsonaazụ ọchụchọ wee chọọ njehie malite na njedebe. Ka o sina dị, eriri na-enyere m aka ịchekwa oge dị ukwuu na nbipu. Enwere m olileanya na ọ ga-abakwara gị uru.

isi: www.habr.com

Tinye a comment