Debugging software deployment ine strace

Debugging software deployment ine strace

Basa rangu rezuva rinonyanya kutumirwa software, zvinoreva kuti ndinopedza nguva yakawanda ndichiedza kupindura mibvunzo yakaita se:

  • Iyi software inoshandira mugadziri, asi kwete kwandiri. Sei?
  • Nezuro iyi software yakandishandira, asi nhasi haina. Sei?

Iyi imhando yedebugging iyo yakati siyanei neyakajairwa software debugging. Kugaro gadzirisa ndeye logic yekodhi, asi deployment debugging ndeye kudyidzana pakati pekodhi uye nharaunda. Kunyange kana mudzi wechinetso chiri chikanganiso chine musoro, chokwadi chokuti zvinhu zvose zvinoshanda pane mumwe muchina uye kwete pane mumwe zvinoreva kuti dambudziko iri neimwe nzira munharaunda.

Saka pachinzvimbo chezvakajairika debugging zvishandiso senge gdb Ndine imwe seti yezvishandiso zvekugadzirisa deployment. Uye chishandiso changu chandinofarira chekubata nedambudziko senge "Nei software iyi isingandishandire?" akadaidzwa tambo.

Chii chinonzi strace?

tambo chishandiso che "system call tracing". Yakagadzirirwa Linux, asi maitiro akafanana ekugadzirisa anogona kuitwa nemidziyo yemamwe masisitimu (DTrace kana ktrace).

Iyo yakakosha application iri nyore kwazvo. Iwe unongoda kumhanya strace nechero rairo uye inorasa ese masystem mafoni (kunyangwe kutanga iwe uchafanira kuzviisa wega. tambo):

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

Ndeapi aya masystem mafoni? Ichi chimwe chinhu senge API yeiyo inoshanda system kernel. Pane imwe nguva, software yaive nekuwana zvakananga kune Hardware yaimhanya nayo. Kana, semuenzaniso, yaida kuratidza chimwe chinhu pachiratidziri, yaitamba nezviteshi kana ndangariro-mareji emepu emidziyo yemavhidhiyo. Pakazozivikanwa masystem akawanda emakombuta, bongozozo rakatonga sezvo akasiyana maapplication akarwa pamusoro pehardware. Kukanganisa mune imwe application kunogona kudzikisa vamwe, kana isiri iyo system yese. Ipapo maropafadzo modes (kana "kudzivirira mhete") akaonekwa muCPU. Iyo kernel yakava nerombo rakawanda: yakawana mukana wakazara kune Hardware, ichiburitsa mashoma rombo manyorerwo ayo aitofanira kukumbira kupinda kubva ku kernel kudyidzana nehardware kuburikidza nehurongwa hwekufona.

Padanho rebhinari, kufona kwehurongwa kwakasiyana zvishoma nekufona kuri nyore, asi mapurogiramu mazhinji anoshandisa wrapper muraibhurari yakajairika. Avo. iyo POSIX C yakajairika raibhurari ine basa rekufona nyora (), iyo ine ese architecture-chaiwo kodhi yekufona system nyora.

Debugging software deployment ine strace

Muchidimbu, chero kudyidzana pakati pechishandiso nenzvimbo yayo (makomputa masisitimu) kunoitwa kuburikidza nehurongwa hwekufona. Naizvozvo, kana software ichishanda pamuchina mumwe asi kwete pane mumwe, zvingave zvakanaka kutarisa iyo system yekufona yekutevera mhinduro. Kunyanya, heino runyorwa rweakajairwa mapoinzi anogona kuongororwa uchishandisa system yekufona trace:

  • Console I/O
  • Network I/O
  • Faira system yekuwana uye faira I/O
  • Kugadzirisa hupenyu hwese hwetambo
  • Low-level memory management
  • Kuwana kune chaiwo madhiraivha emidziyo

Nguva yekushandisa strace?

Mupfungwa, tambo inoshandiswa nechero chirongwa munzvimbo yemushandisi, nekuti chero chirongwa chiri munzvimbo yemushandisi chinofanira kuita mafoni ehurongwa. Inoshanda zvakanyanya nemapurogiramu akaunganidzwa, akaderera-chikamu, asi anoshandawo nemitauro yepamusoro-soro sePython kana iwe uchikwanisa kucheka nekuwedzera ruzha kubva panguva yekumhanya uye muturikiri.

Mukubwinya kwayo kwese tambo inozviratidza panguva yekugadziriswa kwesoftware inoshanda zvakanaka pamuchina mumwe, asi kamwe kamwe inomira kushanda pane imwe, ichiburitsa mameseji asina kujeka nezve mafaera, mvumo, kana kuedza kusingabudiriri kuita mimwe mirairo kana chimwewo chinhu ... Zvinosiririsa, asi hazviiti. sanganisa zvakanaka nematambudziko epamusoro-soro senge zvikanganiso zvekusimbisa zvitupa. Kazhinji izvi zvinoda musanganiswa tambo, dzimwe nguva ltrace uye maturusi epamusoro-soro (senge yekuraira mutsara chishandiso openssl kugadzirisa chitupa).

Isu tichashandisa yakamira sevha semuenzaniso, asi system yekufona yekutevera inogona kazhinji kuitwa pamapuratifomu akaomesesa ekuisa. Iwe unongoda kusarudza maturusi akakodzera.

Muenzaniso wakajeka wekugadzirisa

Ngatiti iwe unoda kumhanyisa inoshamisa server application foo, uye izvi ndizvo zvaunoguma nazvo:

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

Zviripachena haina kuwana faira rekugadzirisa rawakanyora. Izvi zvinoitika nekuti dzimwe nguva kana vatariri vepakeji vachiunganidza application, vanodarika nzvimbo dzinotarisirwa faira. Uye kana iwe uchitevera iyo yekumisikidza gwara rekugovera kumwe, mune imwe iwe unowana mafaira akasiyana zvachose kubva kwawaitarisira. Dambudziko rinogona kugadziriswa mumasekonzi mashoma kana meseji yekukanganisa ikaudzwa kwekutsvaga faira yekumisikidza, asi haidaro. Saka ndotarisa kupi?

Kana iwe uchikwanisa kuwana iyo kodhi kodhi, unogona kuiverenga uye kuona zvese. Chirongwa chakanaka chekuchengetedza, asi kwete mhinduro inokurumidza. Iwe unogona kushandisa nhanho-ne-nhanho debugger senge gdb uye ona zvinoitwa nechirongwa, asi zvinonyanya kushanda kushandisa chishandiso chakanyatsogadzirirwa kuratidza kudyidzana nenharaunda: tambo.

mhedziso tambo zvingaita sezvisina basa, asi mashoko akanaka ndeokuti akawanda acho anogona kufuratirwa zvakakotsekana. Zvinowanzo batsira kushandisa -o opareta kuchengetedza mhedzisiro kune imwe faira rakasiyana:

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

Inenge peji rese rekutanga rezvakabuda tambo - Izvi zvinowanzova zvakaderera-chikamu kugadzirira kutanga. (Kufona kwakawanda mmap, mprotect, quill nezvezvinhu zvakaita sekuona ndangariro dzakaderera uye kuratidza maraibhurari ane simba.) Chaizvoizvo, panguva yekugadzirisa zvinobuda. tambo Zviri nani kuverenga kubva kumagumo. Pachave nedambudziko pazasi nyora, iyo inoratidza meseji yezvikanganiso. Isu tinotarisa pamusoro toona yekutanga kukanganisa system kufona - kufona openat, izvo zvinokanda kukanganisa ENOENT ("faira kana dhairekitori harina kuwanikwa") kuyedza kuvhura /etc/foo/config.json. Apa ndipo panofanira kunge paine faira rekugadzirisa.

Uyu waingova muenzaniso, asi ndaizoti 90% yenguva yandinoshandisa tambo, hapana chinhu chakaoma zvikuru kuita kupfuura ichi. Pazasi pane yakazara nhanho-ne-nhanho debugging gwara:

  • Kugumbuka nekuda kwemeseji isina kujeka nezve system-y kukanganisa kubva kuchirongwa
  • Tangazve purogiramu ne tambo
  • Tsvaga meseji yemhosho mumibairo yekutevera
  • Enda kumusoro kusvika warova yekutanga yatadza system call

Zvinonyanya kuitika kuti iyo system yekufona munhanho 4 icharatidza zvakakanganisika.

Matipi

Ndisati ndakuratidza iwe muenzaniso wekunyanya kuomarara debugging, ini ndinokuratidza matipi mashoma ekushandisa zvinobudirira tambo:

murume ishamwari yako

Pane akawanda * nix masisitimu, runyorwa rwakakwana rwehurongwa hwekufona kune kernel inogona kuwanikwa nekumhanya man syscalls. Iwe uchaona zvinhu zvakadai brk(2), zvinoreva kuti mamwe mashoko anogona kuwanikwa nekumhanya murume 2 brk.

Small rake: murume 2 forogo inondiratidza peji regoko forogo () Π² GNU libc, izvo, zvinozoitika, zvinoshandiswa nekufona clone(). Dana semantics Fork inoramba yakafanana kana iwe ukanyora chirongwa uchishandisa forogo (), uye mhanyisa trace - ini handisi kuzowana chero mafoni Fork, panzvimbo yavo pachava clone(). Maharaki akadaro anongokuvhiringa kana watanga kuenzanisa kwabva nekubuda tambo.

Shandisa -o kuchengetedza zvakabuda kufaira

tambo inogona kuburitsa yakakura kuburitsa, saka zvinowanzo batsira kuchengetedza mhedzisiro mumafaira akasiyana (semumuenzaniso uri pamusoro). Izvi zvinobatsirawo kudzivirira kuvhiringa kubuda kwechirongwa nekubuda tambo mune console.

Shandisa -s kuona imwe nharo data

Iwe unogona kunge waona kuti hafu yechipiri yemeseji yekukanganisa haina kuratidzwa mumuenzaniso wekutevera uri pamusoro. Imhaka yekuti tambo default inoratidza chete yekutanga 32 bytes yetambo nharo. Kana iwe uchida kuona zvakawanda, wedzera chimwe chinhu chakadai -s 128 kufona tambo.

-y inoita kuti zvive nyore kutevedzera mafaera, zvigadziko, nezvimwe.

"Zvese faira" zvinoreva kuti * nix masisitimu anoita zvese I / O vachishandisa faira descriptors, ingave iyo inoshanda kune faira kana network kana interprocess mapaipi. Izvi zvakanakira hurongwa, asi zvinoita kuti zviome kutevera zviri kuitika kana ukaona zvakajairika verenga ΠΈ nyora mu system call trace results.

Nekuwedzera mushandisi -Ρƒ, muchamanikidza tambo descriptor yega yega faira mune zvabuda nenoti yezvainonongedza kwairi.

Batanidza kune yagara ichimhanya maitiro ne -p **

Sezvauchaona kubva pamuenzaniso uri pazasi, dzimwe nguva unofanirwa kutsvaga chirongwa chiri kutotanga kushanda. Kana zvichizivikanwa kuti iri kushanda semaitiro 1337 (taura, kubva pane zvakabuda ps), ipapo unogona kuitevera seizvi:

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

Ungangoda kodzero dzemidzi.

Shandisa -f kutarisa maitiro emwana

tambo Nekusagadzikana, inoteedzera nzira imwe chete. Kana maitiro aya aita kuti mwana aite maitiro, saka iyo system yekufona kuti ibudise maitiro emwana inogona kuoneka, asi iyo yemwana system yekufona haizoonekwe.

Kana iwe uchifunga kuti kukanganisa kuri mukuita kwemwana, shandisa chirevo -f, izvi zvinogonesa kutsvaga kwayo. Izvo zvakaderera pane izvi ndezvekuti zvinobuda zvinokuvhiringa zvakanyanya. Rini tambo inoteedza imwe nzira kana shinda imwe chete, inoratidza imwe rwizi rwezviitiko zvekufona. Kana ichitsvaga maitiro akawanda kamwechete, iwe unogona kuona kutanga kwerunhare rwakakanganiswa meseji , ipapo - boka rekudana kune mamwe matavi ekuuraya, uye chete ipapo - kuguma kwekutanga <…foocall yakatangazve>. Kana kupatsanura zvese zvekutevera mhedzisiro mumafaira akasiyana, zvakare uchishandisa opareta -ff (details in hutungamiri pamusoro tambo).

Sefa maronda uchishandisa -e

Sezvauri kuona, mhedzisiro yekuteedzera murwi chaiwo wezvese zvinogoneka system mafoni. Flag -e Unogona kusefa trace (ona gwara pamusoro tambo) Kubatsira kukuru ndekwekuti inokurumidza kumhanya yakasefa pane kuita yakazara yakazara uye ipapo grep`pa. Kutaura chokwadi, ndinenge ndisina basa nazvo.

Hadzisi zvikanganiso zvese zvakaipa

Muenzaniso wakapfava uye wakajairika chirongwa chekutsvaga faira munzvimbo dzinoverengeka kamwechete, segoko rinotsvaga dhairekitori rine faira rinogoneka:

$ 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 senge "yekupedzisira kutadza chikumbiro usati wataura chikanganiso" yakanaka pakutsvaga zvikanganiso zvakakodzera. Ngazvive zvakadaro, zvine musoro kutanga kubva kumagumo.

C programming tutorials inogona kukubatsira iwe kunzwisisa system mafoni.

Yakajairwa kufona kumaraibhurari eC haisi system yekufona, asi ingori nhete yepasi. Saka, kana iwe uchinzwisisa zvishoma sei uye zvekuita muC, zvichave nyore kwauri kuti unzwisise mhedzisiro yehurongwa hwekufona trace. Semuenzaniso, une dambudziko rekugadzirisa mafoni kunetiweki masisitimu, tarisa iyo yakafanana classical Bija's Guide kune Network Programming.

Imwe yakaoma debugging muenzaniso

Ndakatotaura kuti muenzaniso wekugadzirisa zviri nyore muenzaniso wezvandinofanira kutarisana nazvo kana ndichishanda nazvo tambo. Nekudaro, dzimwe nguva kuferefeta chaiko kunodiwa, saka heino muenzaniso chaiwo wehupenyu hwekuwedzera debugging.

bcron - Task process scheduler, kumwe kuita kwe * nix daemon cron they. Yakaiswa pane sevha, asi kana mumwe munhu akaedza kugadzirisa hurongwa, izvi ndizvo zvinoitika:

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

Okay, zvinoreva bcron akaedza kunyora imwe faira, asi haina kushanda, uye haabvumi chikonzero nei. Kufukunura tambo:

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

Pane meseji yemhosho pedyo nekumagumo nyora, asi panguva ino chimwe chinhu chasiyana. Chekutanga, hapana yakakodzera system yekufona kukanganisa, inowanzoitika izvi zvisati zvaitika. Chechipiri, zviri pachena kuti pane imwe nzvimbo munhu atoverenga meseji yekukanganisa. Zvinoita sekuti dambudziko chairo riri kumwewo, uye bcrontab anongoridza achidzosera meseji.

Kana iwe ukatarisa murume 2 verenga, unogona kuona kuti nharo yekutanga (3) inotsanangura faira, iyo * nix inoshandisa kune yese I / O kugadzirisa. Ini ndowana sei kuti faira descriptor 3 inomiririra? Muchiitiko ichi, unogona kumhanya tambo nemushandisi -Ρƒ (ona pamusoro) uye inozongokuudza, asi kuti uone zvinhu zvakaita seizvi, zvinobatsira kuziva kuverenga uye kupenengura mhinduro.

Kunobva faira descriptor inogona kuve imwe yeakawanda masystem ekufona (zvese zvinoenderana nekuti rondedzero ndeyei - koni, network socket, iyo faira pachayo, kana chimwewo chinhu), asi ngazvive izvo, isu tinotarisira. kufona nekudzorera 3 (kureva kuti tinotarisa "= 3" mumitsva yekutevera). Muchigumisiro ichi pane maviri acho: openat kumusoro chaiko uye soketi Pakati. openat anovhura faira asi pedyo(3) ichabva yaratidza kuti inovhara zvakare. (Rake: tsananguro dzefaira dzinogona kushandiswazve kana dzavhurwa nekuvharwa). Call socket() yakakodzera nekuti ndiyo yekupedzisira kare verenga (), uye zvinozoitika kuti bcrontab inoshanda nechimwe chinhu kuburikidza nesokisi. Mutsara unotevera unoratidza kuti iyo faira descriptor yakabatana nayo unix domain socket munzira /var/run/bron-spool.

Saka, tinofanira kuwana nzira yakabatana nayo unix socket kune rumwe rutivi. Kune akati wandei akatsvinda matipi echinangwa ichi, ese ari maviri anobatsira pakubvisa server deployments. Yekutanga ndeye kushandisa netstat kana itsva ss (socket status). Mirairo miviri inoratidza iyo system inoshanda network yekubatanidza uye tora chirevo -l kutsanangura zvigadziko zvekuteerera, pamwe nemushandisi -p kuratidza mapurogiramu akabatanidzwa kune socket semutengi. (Kune zvimwe zvakawanda zvinobatsira zvingasarudzwa, asi izvi zviviri zvakakwanira basa iri.)

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

Izvi zvinoratidza kuti muteereri ndiye murayiro inixserver, inoshanda neprocess ID 20629. (Uye, zvakangoitika, inoshandisa faira descriptor 3 sesoketi.)

Chechipiri chinobatsira chaizvo chekutsvaga ruzivo rwakafanana chinonzi lsof. Inonyora mafaera ese akavhurika (kana mafaera anotsanangura) pane system. Kana iwe unogona kuwana ruzivo nezve imwe chaiyo faira:

# 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

Maitiro 20629 iseva yenguva refu, saka unogona kuibatanidza nayo tambo kushandisa chinhu chakadaro tambo -o /tmp/trace -p 20629. Kana iwe ukagadzirisa basa re cron mune imwe terminal, iwe unogashira yekuteedzera yakabuda nechikanganiso. Uye heino mhedzisiro:

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

(Pakupedzisira bvuma() haipedzwe pakutsvagwa.) Zvakare, zvinosuwisa, mhedzisiro iyi haina kukanganisa kwatiri kutsvaga. Isu hatione chero meseji inotumirwa nebcrontag kana kugamuchira kubva kune socket. Pane kudaro, zadzisa process control (clone, wait4, SIGCHLD etc.) Iyi nzira inobereka maitiro emwana, ayo, sezvaungafungidzira, anoita basa chairo. Uye kana iwe uchida kubata nzira yake, wedzera kune kufona mutsara -f. Izvi ndizvo zvatichawana kana tatsvaga meseji yekukanganisa mumhedzisiro nyowani ine 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 +++

Zvino, ndicho chinhu. Maitiro 21470 anogashira "kusvika kwarambwa" kukanganisa paunenge uchiedza kugadzira faira munzira tmp/spool.21470.1573692319.854640 (inoenderana neyazvino dhairekitori rekushanda). Dai isu taingoziva dhairekitori rekushanda razvino, taizozivawo nzira yakazara uye tinokwanisa kufunga kuti nei maitiro acho asingakwanise kugadzira faira rayo renguva pfupi mariri. Nehurombo, maitiro atobuda, saka haugone kungoshandisa lsof -p 21470 kuitira kuti uwane dhairekitori razvino, asi iwe unogona kushanda wakatarisana - tsvaga PID 21470 system inofona inoshandura dhairekitori. (Kana pasina, PID 21470 inofanira kunge yakagara nhaka kubva kumubereki wayo, uye izvi zvatopfuura. lsof -p haigone kuwanikwa.) Iyi system call ndeye chdir (izvo zviri nyore kuziva nerubatsiro rwemazuva ano ekutsvaga injini dzekutsvaga). Uye heino mhedzisiro yekutsvaga reverse yakavakirwa pane yekutevera mhedzisiro, nzira yese kune server 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 +++

(Kana iwe wakarasika, ungada kuverenga yangu yapfuura post nezve * nix process management uye shellsSaka, sevha PID 20629 haina kugamuchira mvumo yekugadzira faira munzira /var/spool/cron/tmp/spool.21470.1573692319.854640. Zvingangodaro, chikonzero cheiyi ndiyo yekare faira system mvumo zvigadziriso. Ngatitarisei:

# 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

Ndiko kwakavigwa imbwa! Sevha inomhanya semushandisi cron, asi mudzi chete une mvumo yekunyora kune dhairekitori /var/spool/cron/tmp/. Murayiro uri nyore chown cron /var/spool/cron/tmp/ achamanikidza bcron shanda nemazvo. (Dai iro risiri iro dambudziko, saka anotevera angangove anofungidzirwa kernel kuchengetedza module seSELinux kana AppArmor, saka ndaitarisa kernel meseji log ne. cdes.)

Total

Matekisheni ekufona eSistimu anogona kuwanda kune anotanga, asi ndinovimba ndaratidza kuti inzira yekukurumidza kugadzirisa kirasi yese yezvinetso zvekutumira. Fungidzira uchiedza kugadzirisa multiprocess bcronkushandisa nhanho-ne-nhanho debugger.

Parsing trace mhedzisiro kumashure pamwe neiyo system yekufona cheni inoda hunyanzvi, asi sezvandakataura, kanenge nguva dzose, kushandisa tambo, ini ndinongowana mhedzisiro uye ndinotarisa zvikanganiso kutanga kubva kumagumo. Zvakadaro, tambo inondibatsira kuchengetedza nguva yakawanda pakugadzirisa. Ndinovimba zvichabatsirawo kwauri.

Source: www.habr.com

Voeg