Debugging software deployment nrog strace

Debugging software deployment nrog strace

Kuv txoj haujlwm niaj hnub no feem ntau yog siv software, uas txhais tau tias kuv siv sijhawm ntau los teb cov lus nug xws li:

  • Cov software no ua haujlwm rau tus tsim tawm, tab sis tsis yog rau kuv. Vim li cas?
  • Nag hmo no software ua haujlwm rau kuv, tab sis hnub no nws tsis ua. Vim li cas?

Qhov no yog hom kev debugging uas txawv me ntsis ntawm cov software debugging li niaj zaus. Kev debugging tsis tu ncua yog hais txog lub logic ntawm txoj cai, tab sis kev xa tawm debugging yog hais txog kev sib cuam tshuam ntawm cov cai thiab ib puag ncig. Txawm hais tias lub hauv paus ntawm qhov teeb meem yog qhov yuam kev, qhov tseeb tias txhua yam ua haujlwm ntawm ib lub tshuab thiab tsis nyob rau lwm qhov txhais tau tias qhov teeb meem yog qee yam hauv ib puag ncig.

Yog li es tsis txhob siv cov cuab yeej debugging ib txwm nyiam ua gdb Kuv muaj cov txheej txheem sib txawv rau kev debugging deployment. Thiab kuv nyiam cov cuab yeej rau kev daws teeb meem zoo li "Vim li cas qhov software no tsis ua haujlwm rau kuv?" hu ua nruj.

Dab tsi yog txoj hlua?

nruj yog ib qho cuab yeej rau "system hu tracing". Nws yog Ameslikas tsim rau Linux, tab sis tib lub debugging tricks tuaj yeem ua nrog cov cuab yeej rau lwm lub tshuab (DTrace los yog kev ktra).

Cov ntawv thov yooj yim heev. Koj tsuas yog yuav tsum tau khiav txoj kab nrog ib qho kev hais kom ua thiab nws yuav pov tseg tag nrho cov kev hu xov tooj (txawm hais tias ua ntej koj yuav tau teeb tsa koj tus kheej nruj):

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

Cov kab ke hu li cas? Qhov no yog ib yam dab tsi zoo li API rau lub operating system kernel. Ib zaug dhau ib zaug, software tau ncaj qha nkag mus rau lub hardware nws tau khiav. Yog hais tias, piv txwv li, nws xav tau los tso saib ib yam dab tsi ntawm lub vijtsam, nws ua si nrog cov chaw nres nkoj lossis lub cim xeeb daim ntawv teev npe rau cov khoom siv video. Thaum multitasking computer systems tau nrov, chaos reigned raws li ntau yam kev siv sib ntaus sib tua ntawm hardware. Qhov yuam kev hauv ib daim ntawv thov tuaj yeem ua rau lwm tus, yog tias tsis yog tag nrho cov kab ke. Tom qab ntawd txoj cai hom (los yog "ntiv nplhaib tiv thaiv") tshwm sim hauv CPU. Lub kernel tau dhau los ua qhov tsim nyog tshaj plaws: nws tau txais kev nkag mus rau tag nrho cov khoom siv kho vajtse, ua rau cov ntawv thov tsis muaj cai uas twb tau thov kev nkag los ntawm cov ntsiav los cuam tshuam nrog cov khoom siv los ntawm kev hu xov tooj.

Nyob rau theem binary, kev hu xov tooj sib txawv me ntsis los ntawm kev hu xov tooj yooj yim, tab sis feem ntau cov kev pab cuam siv wrapper hauv cov tsev qiv ntawv txheem. Cov. lub tsev qiv ntawv POSIX C tus qauv muaj cov haujlwm hu sau (), uas muaj tag nrho cov kab lis kev cai tshwj xeeb rau kev hu xov tooj sau ntawv.

Debugging software deployment nrog strace

Nyob rau hauv luv luv, ib qho kev sib cuam tshuam ntawm ib daim ntawv thov thiab nws ib puag ncig (lub computer systems) yog ua los ntawm kev hu xov tooj. Yog li ntawd, thaum software ua haujlwm ntawm ib lub tshuab tab sis tsis nyob rau lwm qhov, nws yuav zoo rau saib lub kaw lus hu tracing cov txiaj ntsig. Tshwj xeeb tshaj yog, ntawm no yog cov npe ntawm cov ntsiab lus uas tuaj yeem txheeb xyuas tau siv lub kaw lus hu rau kab:

  • Console I/O
  • Network I/O
  • Cov ntaub ntawv nkag mus thiab cov ntaub ntawv I / O
  • Tswj lub neej ntawm cov txheej txheem xov
  • Kev tswj hwm kev nco qis qis
  • Nkag mus rau cov tsav tsheb tshwj xeeb

Thaum twg siv txoj hlua?

Hauv kev xav, nruj siv nrog txhua qhov kev pab cuam hauv cov neeg siv qhov chaw, vim tias txhua qhov kev pab cuam hauv qhov chaw siv yuav tsum hu xov tooj. Nws ua haujlwm tau zoo dua nrog kev sau ua ke, cov haujlwm qis, tab sis nws kuj ua haujlwm nrog cov lus siab zoo li Python yog tias koj tuaj yeem txiav los ntawm lub suab nrov ntxiv los ntawm lub sijhawm khiav thiab tus neeg txhais lus.

Nyob rau hauv tag nrho nws lub yeeb koob nruj manifests nws tus kheej thaum lub sij hawm debugging ntawm software uas ua hauj lwm zoo nyob rau hauv ib lub tshuab, tab sis mam li nco dheev nres ua hauj lwm rau lwm tus, tsim vague lus hais txog cov ntaub ntawv, kev tso cai, los yog ua tsis tau tejyam sim ua tej yam commands los yog lwm yam ... Nws yog ib tug tu siab, tab sis nws tsis ua tiav. ua ke kom zoo nrog cov teeb meem qib siab xws li kev pov thawj pov thawj tsis raug. Feem ntau qhov no yuav tsum muaj kev sib xyaw ua ke nrujqee zaum ltrace thiab cov cuab yeej qib siab (xws li cov cuab yeej kab hais kom ua openssl mus debug daim ntawv pov thawj).

Peb yuav siv tus neeg rau zaub mov nyob ib leeg ua piv txwv, tab sis kev hu xov tooj tuaj yeem ua tau feem ntau ua tiav ntawm ntau qhov kev xa tawm platform. Koj tsuas yog yuav tsum xaiv cov cuab yeej zoo.

Yooj yim debugging piv txwv

Cia peb hais tias koj xav khiav lub amazing server daim ntawv thov foo, thiab qhov no yog qhov koj xaus nrog:

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

Thaj nws nrhiav tsis pom cov ntaub ntawv teeb tsa koj sau. Qhov no tshwm sim vim qee zaum thaum cov neeg tswj hwm pob suav sau ib daim ntawv thov, lawv hla cov ntaub ntawv xav tau. Thiab yog tias koj ua raws li phau ntawv qhia kev teeb tsa rau ib qho kev faib tawm, hauv lwm qhov koj pom cov ntaub ntawv sib txawv ntawm qhov koj xav tau. Qhov teeb meem tuaj yeem daws tau hauv ob peb lub vib nas this yog tias cov lus yuam kev qhia qhov twg los nrhiav cov ntaub ntawv teeb tsa, tab sis nws tsis ua. Yog li saib qhov twg?

Yog tias koj nkag mus rau qhov chaws, koj tuaj yeem nyeem nws thiab paub txhua yam. Ib txoj kev npaj thaub qab zoo, tab sis tsis yog qhov kev daws teeb meem ceev tshaj plaws. Koj tuaj yeem hloov mus rau ib kauj ruam los ntawm kauj ruam debugger zoo li ua gdb thiab saib seb qhov kev zov me nyuam ua li cas, tab sis nws muaj txiaj ntsig zoo dua los siv cov cuab yeej tshwj xeeb tsim los qhia kev cuam tshuam nrog ib puag ncig: nruj.

xaus nruj tej zaum yuav zoo li redundant, tab sis cov xov xwm zoo yog tias feem ntau ntawm nws tuaj yeem tsis quav ntsej yam xyuam xim. Nws yog feem ntau pab tau siv tus neeg teb xov tooj -o kom txuag tau cov txiaj ntsig mus rau cov ntaub ntawv cais:

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

Kwv yees li tag nrho thawj nplooj ntawv ntawm cov zis nruj - Qhov no feem ntau yog qib qis npaj rau kev tso tawm. (Ntau hu mmap ua, tiv thaiv, brk ua rau tej yam xws li kev kuaj xyuas qis qis thiab tso saib cov tsev qiv ntawv dynamic.) Ua tau, thaum lub sij hawm debugging cov zis nruj Nws yog qhov zoo dua los nyeem los ntawm qhov kawg. Yuav muaj kev sib tw hauv qab no sau ntawv, uas qhia cov lus yuam kev. Peb saib saum toj no thiab pom thawj qhov yuam kev hu xov tooj - hu qhib, uas cuam tshuam qhov yuam kev ENOENT ("cov ntaub ntawv lossis cov npe tsis pom") sim qhib /etc/foo/config.json. Qhov no yog qhov uas cov ntaub ntawv configuration yuav tsum yog.

Qhov no tsuas yog piv txwv xwb, tab sis kuv xav hais tias 90% ntawm lub sijhawm kuv siv nruj, tsis muaj ib yam nyuaj npaum li qhov no. Hauv qab no yog ua tiav ib kauj ruam los ntawm kauj ruam debugging qhia:

  • chim siab vim muaj lus tsis meej pem txog qhov system-y yuam kev los ntawm ib qho kev pab cuam
  • Rov pib qhov program nrog nruj
  • Nrhiav cov lus yuam kev hauv qhov kev tshwm sim
  • Mus siab dua kom txog thaum koj ntaus thawj qhov kev hu tsis tau

Nws yog qhov zoo tshaj plaws uas lub kaw lus hu rau hauv kauj ruam 4 yuav qhia qhov ua yuam kev.

Cov lus qhia

Ua ntej koj yuav qhia koj ib tug piv txwv ntawm ntau nyuaj debugging, kuv yuav qhia koj ob peb tricks rau siv tau zoo nruj:

txiv neej yog koj tus phooj ywg

Ntawm ntau * nix systems, tag nrho cov npe ntawm cov kab ke hu mus rau lub ntsiav tuaj yeem tau txais los ntawm kev khiav txiv neej syscalls. Koj yuav pom tej yam zoo li brk(2), uas txhais tau tias cov ntaub ntawv ntau ntxiv tuaj yeem tau los ntawm kev khiav tug 2br.

Small rake: man2 tug qhia kuv nplooj ntawv rau lub plhaub rab rawg () Π² GNU libc, uas, nws hloov tawm, yog siv los ntawm kev hu clone(). Hu rau semantics diav rawg tseem zoo li qub yog tias koj sau ib qhov program siv rab rawg (), thiab khiav ib kab - Kuv yuav tsis pom kev hu diav rawg, hloov ntawm lawv yuav muaj clone(). Xws li rakes tsuas yog ua rau koj tsis meej pem yog tias koj pib sib piv qhov chaw nrog cov zis nruj.

Siv -o txhawm rau txuag cov zis rau hauv cov ntaub ntawv

nruj tuaj yeem tsim cov zis ntau, yog li nws feem ntau muaj txiaj ntsig los khaws cov txiaj ntsig hauv cov ntaub ntawv sib cais (raws li qhov piv txwv saum toj no). Qhov no kuj pab kom tsis txhob muaj kev cuam tshuam cov kev pab cuam nrog cov zis nruj hauv lub console.

Siv -s los saib cov ntaub ntawv sib cav ntxiv

Tej zaum koj yuav tau pom tias qhov thib ob ib nrab ntawm cov lus yuam kev tsis muaj nyob rau hauv cov piv txwv kab saum toj no. Nws yog vim nruj default qhia tsuas yog thawj 32 bytes ntawm txoj hlua sib cav. Yog tias koj xav pom ntxiv, ntxiv ib yam dab tsi zoo li -s 128 mus hu nruj.

-y ua kom yooj yim rau kev taug qab cov ntaub ntawv, qhov (socket), thiab lwm yam.

"Txhua yam yog cov ntaub ntawv" txhais tau hais tias * nix systems ua tag nrho I / O siv cov ntaub ntawv piav qhia, txawm tias siv rau cov ntaub ntawv lossis lub network lossis cov kav dej sib txuas. Qhov no yog qhov yooj yim rau kev ua haujlwm, tab sis ua rau nws nyuaj rau kev taug qab ntawm qhov tshwm sim tiag tiag thaum koj pom ntau nyeem ΠΈ sau ntawv nyob rau hauv lub kaw lus hu trace results.

Los ntawm kev ntxiv tus neeg teb xov tooj muaj tseeb tiag, koj yuav quab yuam nruj annotate txhua cov ntaub ntawv descriptor nyob rau hauv cov zis nrog ib tug ceeb toom ntawm dab tsi nws taw tes rau.

Txuas rau cov txheej txheem uas twb muaj lawm nrog -p**

Raws li koj yuav pom los ntawm cov piv txwv hauv qab no, qee zaum koj yuav tsum taug qab ib qho kev pab cuam uas twb tau ua haujlwm lawm. Yog tias nws paub tias nws tab tom khiav raws li txheej txheem 1337 (hais, los ntawm cov zis ps), koj tuaj yeem taug qab nws zoo li no:

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

Tej zaum koj yuav xav tau cov cai hauv paus.

Siv -f los saib xyuas cov txheej txheem menyuam yaus

nruj Los ntawm lub neej ntawd, nws tsuas yog ib qho txheej txheem xwb. Yog hais tias tus txheej txheem no spawns menyuam cov txheej txheem, ces lub kaw lus hu rau spawn tus me nyuam txheej txheem yuav pom, tab sis tus me nyuam tus txheej txheem hu yuav tsis tshwm.

Yog tias koj xav tias qhov yuam kev yog nyob rau hauv cov txheej txheem menyuam yaus, siv cov lus qhia -f, qhov no yuav pab kom nws tracing. Lub downside rau qhov no yog tias cov zis yuav confuse koj ntau dua. Thaum twg nruj taug ib txoj kev los yog ib txoj xov, nws qhia tau hais tias ib tug kwj ntawm hu cov xwm txheej. Thaum nws taug qab ntau cov txheej txheem ib zaug, koj tuaj yeem pom qhov pib ntawm kev hu cuam tshuam los ntawm cov lus , tom qab ntawd - ib pawg hu rau lwm cov ceg ua tiav, thiab tsuas yog tom qab ntawd - qhov kawg ntawm thawj tus <…foocall resumed>. Los yog faib tag nrho cov kab tshwm sim rau hauv cov ntaub ntawv sib txawv, kuj siv tus neeg teb xov tooj -ff (cov ntsiab lus hauv kev coj noj coj ua rau nruj).

Lim cov kab uas siv -e

Raws li koj tuaj yeem pom, qhov tshwm sim ntawm cov kab yog ib pawg tiag tiag ntawm txhua qhov kev hu xov tooj tuaj yeem ua tau. Chij -e Koj tuaj yeem lim cov kab (saib kev ua thawj coj rau nruj). Lub ntsiab kom zoo dua yog tias nws yog nrawm dua los khiav cov kab lim dej ntau dua li ua kom tag nrho cov kab thiab tom qab ntawd grep'ua. Ua kom ncaj ncees, kuv yuav luag tsis quav ntsej.

Tsis yog txhua qhov yuam kev tsis zoo

Ib qho piv txwv yooj yim thiab zoo ib yam yog ib qho kev pab nrhiav cov ntaub ntawv hauv ntau qhov chaw ib zaug, zoo li lub plhaub nrhiav cov npe uas muaj cov ntaub ntawv ua tiav:

$ 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 zoo li "kev thov ua tsis tiav dhau los ua ntej tshaj tawm qhov yuam kev" yog qhov zoo ntawm kev nrhiav qhov yuam kev. Ua li ntawd, nws yog qhov tsim nyog los pib ntawm qhov kawg.

C programming tutorials tuaj yeem pab koj nkag siab txog kev hu xov tooj.

Kev hu xov tooj rau C cov tsev qiv ntawv tsis yog kev hu xov tooj, tab sis tsuas yog txheej txheej nyias nyias. Yog li, yog tias koj nkag siab tsawg kawg yog yuav ua li cas thiab yuav ua li cas hauv C, nws yuav yooj yim dua rau koj kom nkag siab cov txiaj ntsig ntawm qhov system hu rau kab. Piv txwv li, koj muaj teeb meem debugging hu rau network systems, saib tib classic Bija's Guide to Network Programming.

Ib tug complex debugging piv txwv

Kuv twb tau hais tias qhov piv txwv ntawm kev debugging yooj yim yog ib qho piv txwv ntawm qhov kuv feem ntau yuav tsum tau nrog thaum ua haujlwm nrog nruj. Txawm li cas los xij, qee zaum yuav tsum muaj kev tshawb nrhiav tiag tiag, yog li ntawm no yog qhov piv txwv ntawm lub neej tiag tiag ntawm kev debugging ntau dua.

bcron ua - tus txheej txheem ua haujlwm, lwm qhov kev siv ntawm * nix daemon cron. Nws tau nruab rau ntawm lub server, tab sis thaum ib tus neeg sim hloov lub sijhawm, qhov no tshwm sim:

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

Okay, qhov ntawd txhais tau tias bcron ua sim sau qee cov ntaub ntawv, tab sis nws tsis ua haujlwm, thiab nws yuav tsis lees paub vim li cas. Uncovering nruj:

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

Muaj lus yuam kev nyob ze kawg nkaus sau ntawv, tab sis lub sij hawm no ib yam dab tsi txawv. Ua ntej, tsis muaj teeb meem hu xov tooj yuam kev, uas feem ntau tshwm sim ua ntej qhov no. Qhov thib ob, nws yog qhov tseeb tias qhov chaw ib tus neeg twb tau nyeem cov lus yuam kev lawm. Nws zoo li qhov teeb meem tiag tiag yog nyob rau lwm qhov, thiab bcrontab tsuas plays rov qab cov lus.

Yog koj saib txiv neej 2 nyeem, koj tuaj yeem pom tias thawj qhov kev sib cav (3) yog cov ntaub ntawv piav qhia, uas * nix siv rau txhua qhov kev ua haujlwm I / O. Kuv yuav ua li cas thiaj paub tias cov ntaub ntawv piav qhia 3 sawv cev li cas? Hauv qhov tshwj xeeb no, koj tuaj yeem khiav nruj nrog tus neeg teb xov tooj muaj tseeb tiag (saib saum toj no) thiab nws yuav cia li qhia rau koj, tab sis txhawm rau txheeb xyuas cov khoom zoo li no, nws tseem ceeb heev kom paub nyeem thiab txheeb xyuas cov txiaj ntsig zoo li cas.

Lub hauv paus ntawm cov ntaub ntawv piav qhia tuaj yeem yog ib qho ntawm ntau qhov kev hu xov tooj (nws tag nrho yog nyob ntawm seb tus piav qhia yog li cas - lub console, lub network qhov (socket), cov ntaub ntawv nws tus kheej, lossis lwm yam), tab sis yog tias nws yuav, peb nrhiav. hu los ntawm kev xa rov qab 3 (piv txwv li peb nrhiav "= 3" hauv cov txiaj ntsig tracing). Hauv qhov tshwm sim no muaj 2 ntawm lawv: qhib nyob rau ntawm qhov kawg thiab qhov (socket) Hauv nruab nrab. qhib qhib cov ntaub ntawv tab sis ze(3) Tom qab ntawd yuav qhia tias nws kaw dua. (Rake: cov ntaub ntawv piav qhia tuaj yeem rov qab siv tau thaum lawv qhib thiab kaw). Hu rau qhov () haum vim nws yog qhov kawg ua ntej nyeem (), thiab nws hloov tawm tias bcrontab ua haujlwm nrog ib yam dab tsi los ntawm lub qhov (socket). Cov kab tom ntej no qhia tau hais tias cov ntaub ntawv piav qhia yog txuam nrog unix domain socket ntawm txoj kev /var/run/bcron-spool.

Yog li, peb yuav tsum nrhiav cov txheej txheem cuam tshuam nrog unix lub qhov (socket). nyob rau sab nraud. Muaj ob peb qhov kev ua kom zoo nkauj rau lub hom phiaj no, ob qho tib si muaj txiaj ntsig zoo rau kev debugging server deployments. Thawj yog siv netstat los yog tshiab ss (socket status). Ob qho lus txib qhia lub kaw lus ua haujlwm sib txuas hauv network thiab coj cov lus qhia -l los piav txog lub mloog pob ntseg, nrog rau tus neeg teb xov tooj -p los tso saib cov kev pab cuam txuas nrog lub qhov (socket) raws li tus neeg siv khoom. (Muaj ntau qhov kev xaiv muaj txiaj ntsig, tab sis ob qhov no txaus rau txoj haujlwm no.)

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

Qhov no qhia tias tus mloog yog cov lus txib inixserver ua, khiav nrog txheej txheem ID 20629. (Thiab, coincidentally, nws siv cov ntaub ntawv descriptor 3 raws li lub qhov (socket).

Qhov thib ob pab tau zoo heev rau kev nrhiav tib cov ntaub ntawv hu ua lsof ua. Nws teev tag nrho cov ntaub ntawv qhib (lossis cov ntaub ntawv piav qhia) ntawm qhov system. Lossis koj tuaj yeem tau txais cov ntaub ntawv hais txog ib cov ntaub ntawv tshwj xeeb:

# 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

Txheej txheem 20629 yog tus neeg rau zaub mov nyob ntev, yog li koj tuaj yeem txuas rau nruj siv ib yam dab tsi zoo li xwm txheej -o /tmp/trace -p 20629. Yog tias koj hloov kho txoj haujlwm cron hauv lwm lub davhlau ya nyob twg, koj yuav tau txais cov ntawv tso tawm nrog qhov yuam kev. Thiab ntawm no yog qhov tshwm sim:

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

(Lub xeem txais () yuav tsis ua kom tiav thaum tracing.) Ntxiv dua thiab, hmoov tsis, qhov tshwm sim no tsis muaj qhov yuam kev peb tab tom nrhiav. Peb tsis pom cov lus uas bcrontag xa mus lossis tau txais los ntawm lub qhov (socket). Hloov chaw, ua kom tiav cov txheej txheem tswj (clone, tos 4, SIGCHLD thiab lwm yam.) Cov txheej txheem no nthuav tawm cov txheej txheem menyuam yaus, uas, raws li koj xav, ua haujlwm tiag tiag. Thiab yog tias koj xav tau ntes nws txoj kev, ntxiv rau kev hu rov -f. Qhov no yog qhov peb yuav pom thaum peb tshawb nrhiav cov lus yuam kev hauv qhov tshwm sim tshiab nrog 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 +++

Tam sim no, qhov ntawd yog ib yam. Txheej txheem 21470 tau txais qhov "tsis lees paub" yuam kev thaum sim tsim cov ntaub ntawv ntawm txoj kev tmp/spool.21470.1573692319.854640 (txog rau daim ntawv teev npe ua haujlwm tam sim no). Yog tias peb nyuam qhuav paub cov npe ua haujlwm tam sim no, peb kuj tseem yuav paub tag nrho txoj hauv kev thiab tuaj yeem paub tias vim li cas cov txheej txheem tsis tuaj yeem tsim nws cov ntaub ntawv ib ntus hauv nws. Hmoov tsis zoo, cov txheej txheem tau tawm lawm, yog li koj tsis tuaj yeem siv xwb ib 21470 txhawm rau nrhiav cov npe tam sim no, tab sis koj tuaj yeem ua haujlwm nyob rau hauv qhov kev taw qhia - nrhiav PID 21470 system hu uas hloov cov npe. (Yog tias tsis muaj, PID 21470 yuav tsum tau txais lawv los ntawm nws niam nws txiv, thiab qhov no twb dhau los lawm. lsf -p nrhiav tsis tau.) Qhov kev hu no yog chdir ua (uas yog yooj yim mus nrhiav tau nrog kev pab los ntawm niaj hnub online search engines). Thiab ntawm no yog qhov tshwm sim ntawm kev rov qab tshawb nrhiav raws li qhov tshwm sim, txhua txoj hauv kev mus rau 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 +++

(Yog tias koj poob, tej zaum koj yuav xav nyeem kuv cov ntawv dhau los hais txog * nix txheej txheem tswj thiab plhaub.) Yog li, tus neeg rau zaub mov PID 20629 tsis tau txais kev tso cai los tsim cov ntaub ntawv ntawm txoj kev /var/spool/cron/tmp/spool.21470.1573692319.854640. Feem ntau yuav, yog vim li cas rau qhov no yog classic cov ntaub ntawv system tso cai chaw. Cia peb kuaj:

# 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

Qhov ntawd yog tus dev faus! Cov neeg rau zaub mov khiav raws li tus neeg siv cron, tab sis tsuas yog hauv paus muaj kev tso cai los sau rau hauv cov npe /var/spool/cron/tmp/. Yooj yim hais kom ua chown cron /var/spool/cron/tmp/ yuav yuam bcron ua ua haujlwm kom raug. (Yog tias qhov ntawd tsis yog qhov teeb meem, tom qab ntawd qhov feem ntau yuav xav tias yog lub kernel kev ruaj ntseg module zoo li SELinux lossis AppArmor, yog li kuv xav tshawb xyuas cov lus sau nrog dmesg.)

Tag nrho

Cov kab ke hu xov tooj tuaj yeem nyuaj rau cov neeg pib tshiab, tab sis kuv vam tias kuv tau pom tias lawv yog txoj hauv kev nrawm los daws tag nrho cov chav kawm ntawm cov teeb meem kev xa mus. Xav txog tej yam sim mus debug ib tug multiprocess bcron uasiv ib tug step-by-step debugger.

Kev txheeb xyuas cov txiaj ntsig rov qab los ntawm cov saw hlau ntawm kev hu xov tooj yuav tsum muaj kev txawj, tab sis raws li kuv tau hais, yuav luag txhua zaus, siv nruj, Kuv tsuas yog tau txais qhov tshwm sim thiab nrhiav qhov yuam kev pib txij thaum kawg. Txawm li cas los xij, nruj pab kuv txuag sijhawm ntau ntawm kev debugging. Kuv vam tias nws yuav muaj txiaj ntsig rau koj thiab.

Tau qhov twg los: www.hab.com

Ntxiv ib saib