Debugging software e tsamaisoa ka strace

Debugging software e tsamaisoa ka strace

Mosebetsi oa ka oa letsatsi hangata ke ho tsamaisa software, ho bolelang hore ke qeta nako e ngata ke leka ho araba lipotso tse kang:

  • Software ena e sebetsa bakeng sa moqapi, empa eseng bakeng sa ka. Hobaneng?
  • Maobane software ena e ile ea sebetsa bakeng sa ka, empa kajeno ha e sebetse. Hobaneng?

Ona ke mofuta oa debugging o fapaneng hanyane le oa kamehla oa software debugging. Ho lokisa liphoso khafetsa ho mabapi le mohopolo oa khoutu, empa debugging ea deployment e mabapi le tšebelisano lipakeng tsa khoutu le tikoloho. Esita le haeba motso oa bothata e le phoso e utloahalang, taba ea hore ntho e 'ngoe le e' ngoe e sebetsa mochine o mong eseng ho o mong e bolela hore bothata bo teng ka tsela e itseng tikolohong.

Kahoo ho e-na le lisebelisoa tse tloaelehileng tsa ho lokisa liphoso tse kang gdb Ke na le lisebelisoa tse fapaneng tsa ho lokisa liphoso. Le sesebelisoa seo ke se ratang haholo sa ho sebetsana le bothata bo kang "Hobaneng software ee e sa sebetse ho 'na?" bitsetsoa strace.

Strace ke eng?

strace ke sesebelisoa sa "ho latela mohala oa sistimi". E ne e etselitsoe Linux qalong, empa maqheka a tšoanang a ho lokisa liphoso a ka etsoa ka lisebelisoa tsa lisebelisoa tse ling (DTrace kapa ktrace).

Kopo ea motheo e bonolo haholo. U hloka feela ho matha strace ka taelo efe kapa efe 'me e tla lahla mehala eohle ea sistimi (leha pele u tla tlameha ho e kenya ka bouena. strace):

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

Mehala ee ea tsamaiso ke efe? Sena ke ntho e kang API bakeng sa kernel ea sistimi e sebetsang. Ka nako e 'ngoe, software e ne e na le phihlello e tobileng ho hardware eo e neng e sebetsa ho eona. Haeba, ka mohlala, e ne e hloka ho hlahisa ntho e itseng skrineng, e ne e bapala ka likou kapa li-regisete tse entsoeng ka memori bakeng sa lisebelisoa tsa video. Ha litsamaiso tsa lik'homphieutha tse etsang lintho tse ngata li tuma, ho ile ha rena pherekano ha mekhoa e sa tšoaneng e ntse e loantšana le hardware. Liphoso ts'ebetsong e le 'ngoe li ka theola tse ling, haeba e se sistimi eohle. Ebe mekhoa ea litokelo (kapa "ts'ireletso ea selikalikoe") e hlahile ho CPU. Kernel e ile ea e-ba tokelo e kholo ka ho fetisisa: e ile ea fumana phihlelo e feletseng ea hardware, ea hlahisa lits'ebetso tse fokolang tse neng li se li ntse li tlameha ho kopa ho kena ho kernel ho sebelisana le hardware ka mehala ea tsamaiso.

Boemong ba binary, mohala oa sistimi o fapane hanyane le mohala o bonolo oa ts'ebetso, empa mananeo a mangata a sebelisa wrapper laebraring e tloaelehileng. Tseo. laeborari e tloaelehileng ea POSIX C e na le mohala oa tšebetso ngola (), e nang le khoutu eohle e ikhethileng ea meralo bakeng sa mohala oa sistimi ngola.

Debugging software e tsamaisoa ka strace

Ka bokhutšoanyane, tšebelisano leha e le efe pakeng tsa kopo le tikoloho ea eona (litsamaiso tsa lik'homphieutha) li etsoa ka mehala ea tsamaiso. Ka hona, ha software e sebetsa mochining o le mong empa eseng ho o mong, ho ka ba molemo ho sheba liphetho tsa tlhahlobo ea mohala oa sistimi. Haholo-holo, mona ke lethathamo la lintlha tse tloaelehileng tse ka hlahlojoang ho sebelisoa mohala oa mohala oa sistimi:

  • Console I/O
  • Netweke I/O
  • Ho fihlella sistimi ea faele le faele ea I/O
  • Ho laola bophelo bohle ba khoele ea tšebetso
  • Taolo ea memori ea boemo bo tlase
  • Ho fihlella ho bakhanni ba lisebelisoa tse itseng

U ka sebelisa strace neng?

Ka khopolo, strace e sebelisoa le lenaneo lefe kapa lefe sebakeng sa mosebelisi, hobane lenaneo lefe kapa lefe le sebakeng sa mosebelisi le tlameha ho etsa mehala ea sistimi. E sebetsa ka mokhoa o atlehileng haholoanyane ka mananeo a hlophisitsoeng, a boemo bo tlase, empa e boetse e sebetsa le lipuo tsa boemo bo holimo joalo ka Python haeba o ka fokotsa lerata le eketsehileng ho tloha nakong ea ho matha le mofetoleli.

Kganyeng yohle ya yona strace e iponahatsa nakong ea ho lokisa software e sebetsang hantle mochineng o mong, empa ka tšohanyetso e khaotsa ho sebetsa ho e 'ngoe, e hlahisa melaetsa e sa hlakang ka lifaele, tumello, kapa boiteko bo sa atleheng ba ho phethahatsa litaelo tse ling kapa ntho e' ngoe ... Ke masoabi, empa ha ho joalo. kopanya hantle le mathata a boemo bo holimo joalo ka liphoso tsa netefatso ea setifikeiti. Hangata sena se hloka motsoako straceka linako tse ling ltrace le lisebelisoa tsa boemo bo holimo (joalo ka sesebelisoa sa mola oa taelo openssl ho lokisa setifikeiti).

Re tla sebelisa seva e ikemetseng e le mohlala, empa mokhoa oa ho batla mohala oa sistimi hangata o ka etsoa ka li-platform tse rarahaneng tsa ho tsamaisa. U hloka feela ho khetha lisebelisoa tse nepahetseng.

Mohlala o bonolo oa ho lokisa liphoso

Ha re re u batla ho sebelisa sesebelisoa se makatsang sa foo, 'me sena ke seo u qetellang ka sona:

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

Kamoo ho bonahalang kateng ha e khone ho fumana faele ea litlhophiso eo u e ngotseng. Sena se etsahala hobane ka linako tse ling, ha batsamaisi ba liphutheloana ba bokella kopo, ba fetisa libaka tsa lifaele tse lebelletsoeng. 'Me haeba u latela tataiso ea ho kenya kabo e le' ngoe, ho e 'ngoe u fumana lifaele tse fapaneng ka ho feletseng le moo u neng u lebeletse. Bothata bo ka rarolloa ka metsotsoana e seng mekae haeba molaetsa oa phoso o ne o ka bolelloa hore na o batla faele ea tlhophiso hokae, empa ha ho joalo. Joale u ka sheba hokae?

Haeba u na le phihlello ea khoutu ea mohloli, u ka e bala 'me u fumane tsohle. Morero o motle oa ho boloka, empa eseng tharollo e potlakileng. U ka retelehela ho debugger ea mohato ka mohato joalo ka gdb 'me u bone seo lenaneo le se etsang, empa ho sebetsa haholo ho sebelisa sesebelisoa se etselitsoeng ka ho khetheha ho bontša tšebelisano le tikoloho: strace.

fihlela qeto e strace e ka ’na ea bonahala e se na thuso, empa litaba tse monate ke hore boholo ba eona bo ka hlokomolohuoa ka mokhoa o sireletsehileng. Hangata ho bohlokoa ho sebelisa -o opareitara ho boloka sephetho sa morao-rao faeleng e arohaneng:

$ 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 +++

Hoo e ka bang leqephe lohle la pele la tlhahiso strace - Hangata sena ke boitokisetso bo tlase ba ho qala. (Mehala e mengata mmapa, sireletsa, quill bakeng sa lintho tse kang ho lemoha mohopolo oa boemo bo tlaase le ho hlahisa lilaebrari tse matla.) Ha e le hantle, nakong ea ho lokisa sephetho. strace Ho molemo ho bala ho tloha qetellong. Ho tla ba le phephetso ka tlase ngola, e bonts'ang molaetsa oa phoso. Re sheba ka holimo mme re bona mohala oa pele o fosahetseng oa sistimi - mohala openat, e lahlelang phoso ENOENT ("file kapa directory ha e fumanehe") e lekang ho bula /etc/foo/config.json. Mona ke moo faele ea tlhophiso e lokelang ho ba teng.

Ona e ne e le mohlala feela, empa nka re 90% ea nako eo ke e sebelisang strace, ha ho letho le thata ho feta ho etsa sena. Ka tlase ke tataiso e felletseng ea mohato ka mohato:

  • Halefa ka lebaka la molaetsa o sa hlakang mabapi le phoso ea system-y ho tsoa lenaneong
  • Qala hape lenaneo ka strace
  • Fumana molaetsa oa phoso liphethong tsa morao-rao
  • Eya holimo ho fihlela o otla mohala oa pele o hlolehileng oa sistimi

Ho na le monyetla oa hore mohala oa sistimi mohatong oa 4 o tla senola se ileng sa fosahala.

Malebela

Pele ke u bontša mohlala oa ho lokisa liphoso tse rarahaneng, ke tla u bontša maqheka a 'maloa bakeng sa tšebeliso e sebetsang strace:

monna ke motsoalle oa hao

Lits'ebetsong tse ngata tsa * nix, lethathamo le felletseng la mehala ea sistimi ho kernel le ka fumanoa ka ho sebetsa motho syscalls. U tla bona lintho tse kang brk(2), e bolelang hore boitsebiso bo eketsehileng bo ka fumanoa ka ho matha monna 2 brk.

Rake e nyane: monna 2 fereko e mpontša leqephe la khetla fereko () в GNU libc, eo, e hlahang, e kenngoa ts'ebetsong ka ho letsetsa clone(). Bitsa semantics Fereko e lula e tšoana haeba u ngola lenaneo u sebelisa fereko (), 'me u tsamaise mohlala - ha ke sa tla fumana mehala Fereko, sebakeng sa tsona ho tla ba teng clone(). Li-rake tse joalo li u ferekanya feela ha u qala ho bapisa mohloli le tlhahiso strace.

Sebelisa -o ho boloka tlhahiso faeleng

strace e ka hlahisa lihlahisoa tse ngata, kahoo hangata ho molemo ho boloka liphetho tsa morao-rao lifaeleng tse arohaneng (joaloka mohlala o ka holimo). Sena se boetse se thusa ho qoba ho ferekanya tlhahiso ea lenaneo le tlhahiso strace ka ho tšelisa.

Sebelisa -s ho sheba lintlha tse ling tsa likhang

E ka 'na eaba u hlokometse hore halofo ea bobeli ea molaetsa oa phoso ha e bontšoe mohlaleng o ka holimo. Ke hobane strace default e bonts'a li-byte tsa pele tse 32 feela tsa khang ea likhoele. Haeba u batla ho bona tse ling, eketsa ntho e kang ena -s 128 ho pitso strace.

-y e etsa hore ho be bonolo ho latela lifaele, li-sockets, joalo-joalo.

"All is file" e bolela hore *nix system e etsa I/O kaofela e sebelisa litlhaloso tsa faele, hore na e sebetsa ho faele kapa marang-rang kapa liphaephe tsa interprocess. Sena se loketse bakeng sa ho etsa mananeo, empa se etsa hore ho be thata ho boloka tlaleho ea se hlileng se etsahalang ha u bona ntho e tloaelehileng bala и ngola ka har'a liphetho tsa trace tsa mohala oa sistimi.

Ka ho eketsa opareitara -y, o tla qobella strace Hlalosa sehlaloi se seng le se seng sa faele se hlahisoang ka mongolo oa seo se supang ho sona.

Hokela ts'ebetsong e seng e ntse e sebetsa ka -p**

Joalokaha u tla bona mohlaleng o ka tlase, ka linako tse ling u hloka ho latela lenaneo le seng le ntse le sebetsa. Haeba ho tsejoa hore e sebetsa joalo ka ts'ebetso 1337 (e re, ho tsoa ho tlhahiso ps), o ka e latela ka tsela ena:

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

U ka 'na ua hloka litokelo tsa metso.

Sebelisa -f ho shebella lits'ebetso tsa bana

strace Ka tloaelo, e latela mokhoa o le mong feela. Haeba ts'ebetso ena e hlahisa lits'ebetso tsa bana, mohala oa sistimi ho hlahisa ts'ebetso ea ngoana o ka bonoa, empa mehala ea sistimi ea ngoana e ke ke ea hlahisoa.

Haeba u nahana hore phoso e ts'ebetsong ea ngoana, sebelisa polelo -f, sena se tla nolofalletsa ho lateloa ha eona. Taba e nyahamisang ho sena ke hore tlhahiso e tla u ferekanya le ho feta. Neng strace e latela mokhoa o le mong kapa khoele e le 'ngoe, e bonts'a letoto le le leng la liketsahalo tsa mohala. Ha e latela mekhoa e mengata ka nako e le 'ngoe, u ka bona ho qala ha mohala o sitisoa ke molaetsa , joale - letšoele la mehala bakeng sa makala a mang a ho bolaoa, 'me feela ka mor'a moo - qetello ea ea pele <…foocall e qalile hape>. Kapa arola liphetho tsohle ho lifaele tse fapaneng, hape u sebelisa opareitara -ff (lintlha ka boetapele ka strace).

Sefa mesaletsa ka ho sebelisa -e

Joalokaha u ka bona, sephetho sa trace ke qubu ea 'nete ea mehala eohle e ka khonehang ea sistimi. Folakha -e O ka sefa mohlala (bona tsamaiso ka strace). Monyetla o ka sehloohong ke hore ho potlakile ho tsamaisa trace e tlhotliloeng ho feta ho etsa mohlala o felletseng ebe joale grep`ho. Ho bua ’nete, hoo e ka bang kamehla ha ke tsotelle.

Hase liphoso tsohle tse mpe

Mohlala o bonolo le o tloaelehileng ke lenaneo le batlang faele libakeng tse 'maloa ka nako e le' ngoe, joalo ka khetla e batlang bukana e nang le faele e sebetsang:

$ 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
...

Li-Heuristics tse kang "kopo ea ho qetela e hlōlehileng pele u tlaleha phoso" li ntle ho fumana liphoso tse nepahetseng. Leha ho ka ba joalo, hoa utloahala ho qala ho tloha qetellong.

Lithupelo tsa C programming li ka u thusa ho utloisisa mehala ea sistimi.

Mehala e tloahelehileng ho lilaebraring tsa C ha se mehala ea sistimi, empa ke karolo e nyane feela ea bokaholimo. Kahoo, haeba u utloisisa bonyane hore na u ka etsa joang le hore na u etse eng ho C, ho tla ba bonolo hore u utloisise sephetho sa mohala oa mohala oa sistimi. Mohlala, o na le bothata ba ho lokisa mehala ho litsamaiso tsa marang-rang, sheba mofuta o tšoanang oa khale Tataiso ea Bija ho Network Programming.

Mohlala o rarahaneng oa ho lokisa liphoso

Ke se ke boletse hore mohlala oa ho lokisa liphoso habonolo ke mohlala oa seo hangata ke tlamehang ho sebetsana le sona ha ke sebetsa strace. Leha ho le joalo, ka linako tse ling lipatlisiso tsa 'nete lia hlokahala, ka hona mona ke mohlala oa sebele oa ho lokisa liphoso tse tsoetseng pele.

bcron - kemiso ea ts'ebetso ea mesebetsi, ts'ebetsong e 'ngoe ea * nix daemon cron. E kentsoe ho seva, empa ha motho e mong a leka ho hlophisa kemiso, ho etsahala sena:

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

Ho lokile, ho bolela bcron o lekile ho ngola faele e itseng, empa ha ea ka ea sebetsa, 'me a ke ke a lumela hore na ke hobane'ng. Koaholla strace:

# 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 +++

Ho na le molaetsa oa phoso haufi le qetellong ngola, empa lekhetlong lena ho na le ho hong ho fapaneng. Ntlha ea pele, ha ho na phoso ea mohala oa tsamaiso, e atisang ho etsahala pele ho sena. Taba ea bobeli, ho hlakile hore kae-kae motho o se a balile molaetsa oa phoso. Ho bonahala eka bothata ba sebele bo sebakeng se seng, 'me bcrontab e bapala feela molaetsa.

Haeba u sheba monna 2 bala, u ka bona hore khang ea pele (3) ke tlhaloso ea faele, eo * nix e e sebelisang bakeng sa ts'ebetso eohle ea I/O. Nka fumana joang hore na descriptor 3 e emela eng? Tabeng ena, o ka matha strace le mosebeletsi -y (sheba ka holimo) 'me e tla u bolella ka bo eona, empa ho fumana lintho tse kang tsena, ho molemo ho tseba ho bala le ho bapisa liphetho tsa morao-rao.

Mohloli oa tlhaloso ea faele e ka ba e 'ngoe ea li-call tse ngata tsa tsamaiso (tsohle li itšetlehile ka seo tlhaloso e leng sona - console, socket ea marang-rang, faele ka boeona, kapa ntho e' ngoe), empa leha ho ka ba joalo, re batla. mehala ka ho khutlisa 3 (ke hore re batla "= 3" liphethong tsa morao-rao). Sephethong sena ho na le tse 2 tsa tsona: openat ka holimo haholo le sekoti Mahareng. openat e bula faele empa haufi(3) joale e tla bontša hore e koala hape. (Rake: litlhaloso tsa faele li ka sebelisoa hape ha li buloa le ho koaloa). Letsa sekoti () e loketseng hobane ke ea ho qetela pele bala (), 'me ho hlaha hore bcrontab e sebetsa le ntho e itseng ka sokete. Mohala o latelang o bontša hore tlhaloso ea faele e amahanngoa le unix domain socket ke tseleng /var/run/bron-spool.

Kahoo, re hloka ho fumana ts'ebetso e amanang le eona sokete ea unix ka nqane. Ho na le maqheka a 'maloa a makhethe bakeng sa morero ona, ao ka bobeli a leng molemo bakeng sa phepelo ea li-server. Ea pele ke ho sebelisa netstat kapa e ncha ss (boemo ba sokete). Litaelo ka bobeli li bonts'a likhokahano tsa marang-rang tse sebetsang tsa sistimi mme li nka polelo -l ho hlalosa sokete tsa ho mamela, mmoho le mosebeletsi -p ho bontsha mananeo a hoketsweng soketeng joalo ka moreki. (Ho na le likhetho tse ling tse ngata tse molemo, empa tsena tse peli li lekane bakeng sa mosebetsi ona.)

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

Sena se fana ka maikutlo a hore momameli ke taelo inixserver, e sebetsang le ts'ebetso ea ID 20629. ('Me, ka tsietsi, e sebelisa tlhaloso ea faele 3 joalo ka sokete.)

Sesebelisoa sa bobeli se hlileng se sebetsang sa ho fumana boitsebiso bo tšoanang se bitsoa lsof. E thathamisa lifaele tsohle tse bulehileng (kapa litlhaloso tsa faele) tsamaisong. Kapa u ka fumana leseli mabapi le faele e le 'ngoe e ikhethileng:

# 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

Process 20629 ke seva e phetseng nako e telele, kahoo o ka e hokela strace ho sebelisa ntho e joalo strace -o /tmp/trace -p 20629. Haeba u hlophisa mosebetsi oa cron ho terminal e 'ngoe, u tla fumana tlhahiso e nang le phoso. Mme sephetho ke sena:

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

(Ho qetela amohela () e ke ke ea phethoa ha ho lateloa.) Hape, ka bomalimabe, sephetho sena ha se na phoso eo re e batlang. Ha re bone melaetsa efe kapa efe eo bcrontag e e romellang kapa e e fumanang ho tsoa ho sokete. Sebakeng seo, taolo e felletseng ea ts'ebetso (clone, emela4, TS'OANELO joalo-joalo) Ts'ebetso ena e hlahisa ts'ebetso ea ngoana, eo, kamoo u ka nahanang, e etsang mosebetsi oa sebele. 'Me haeba u hloka ho ts'oara tsela ea hae, eketsa mohala lesela -f. Sena ke seo re tla se fumana ha re batla molaetsa oa phoso sephethong se secha ka strace -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 +++

Jwale, ke ntho e nngwe. Process 21470 e fumana phoso ea "phihlello e hanetsoeng" ha e leka ho theha faele tseleng tmp/spool.21470.1573692319.854640 (e amanang le bukana e sebetsang ea hajoale). Haeba re ne re tseba lenane la hona joale la ho sebetsa, re ne re tla tseba le tsela e feletseng 'me re tsebe ho tseba hore na ke hobane'ng ha ts'ebetso e ke ke ea etsa faele ea eona ea nakoana ho eona. Ka bomalimabe, ts'ebetso e se e tsoile, kahoo u ke ke ua e sebelisa feela lsof -leq 21470 e le hore u fumane lenane la hona joale, empa u ka sebetsa ka lehlakoreng le leng - batla li-call tsa PID 21470 tse fetolang directory. (Haeba li le sieo, PID 21470 e tlameha ebe e li futsitse ho motsoali oa eona, 'me sena se se se fetile. lsf -p ha e fumanehe.) Pitso ea sistimi e chdir (tseo ho leng bonolo ho li fumana ka thuso ea lienjineri tsa sejoale-joale tsa ho batla marang-rang). Mona ke sephetho sa lipatlisiso tsa morao-rao tse ipapisitseng le sephetho sa morao-rao, ho ea fihla ho seva PID 20629:

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

(Haeba u lahlehile, u kanna ua batla ho bala poso ea ka e fetileng mabapi le *tsamaiso ea ts'ebetso ea nix le likhetla.) Kahoo, seva sa PID 20629 ha sea ka sa fumana tumello ea ho etsa faele tseleng /var/spool/cron/tmp/spool.21470.1573692319.854640. Mohlomong, lebaka la sena ke litlhophiso tsa tumello ea sistimi ea khale. Ha re hlahlobeng:

# 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

Ke moo ntja e patiloeng teng! Seva e sebetsa joalo ka cron ea mosebelisi, empa ke motso feela o nang le tumello ea ho ngolla bukeng /var/spool/cron/tmp/. Taelo e bonolo chown cron /var/spool/cron/tmp/ tla qobella bcron sebetsa ka nepo. (Haeba seo e ne e se bothata, joale motho ea latelang ea belaelloang ke mojule oa ts'ireletso ea kernel joalo ka SELinux kapa AppArmor, kahoo ke ne ke tla hlahloba molaetsa oa kernel ka dmesg.)

Kakaretso

Mesaletsa ea mehala ea sistimi e ka ba boima ho motho ea qalang, empa ke ts'epa hore ke bonts'itse hore ke tsela e potlakileng ea ho rarolla mathata a tloaelehileng a thomello. Nahana ka ho leka ho lokisa multiprocess bcronho sebedisa sethibela kgato ka kgato.

Ho hlahisa liphetho tsa morao-rao ho latela ketane ea mohala oa sistimi ho hloka boiphihlelo, empa joalo ka ha ke boletse, hoo e ka bang kamehla, ho sebelisa strace, Ke mpa ke fumana sephetho sa trace mme ke sheba liphoso ho tloha qetellong. Leha ho le joalo, strace e nthusa ho boloka nako e ngata ho lokisa liphoso. Ke tšepa hore e tla u tsoela molemo le uena.

Source: www.habr.com

Eketsa ka tlhaloso