ʻO kaʻu hana o ka lā ka hapa nui o ka hoʻonohonoho polokalamu, ʻo ia ka mea e hoʻolilo nui au i ka manawa e hoʻāʻo ai e pane i nā nīnau e like me:
- Hana kēia polokalamu no ka mea hoʻomohala, akā ʻaʻole iaʻu. No ke aha mai?
- I nehinei ua hana kēia polokalamu iaʻu, akā i kēia lā ʻaʻole. No ke aha mai?
ʻO kēia keʻano o ka hoʻopiʻiʻana i kahiʻokoʻa iki mai ka hoʻopiʻi polokalamu maʻamau. ʻO ka debugging maʻamau e pili ana i ka loiloi o ke code, akā ʻo ka debugging deployment e pili ana i ka pilina ma waena o ke code a me ke kaiapuni. ʻOiai ʻo ke kumu o ka pilikia he hewa kūpono, ʻo ka ʻoiaʻiʻo o ka hana ʻana o nā mea āpau ma ka mīkini hoʻokahi a ʻaʻole ma kahi ʻē aʻe ke ʻano o ka pilikia ma ke kaiapuni.
No laila ma kahi o nā mea hana debugging maʻamau e like me gdb Loaʻa iaʻu kahi ʻano mea hana ʻē aʻe no ka debugging deployment. A ʻo kaʻu mea hana punahele no ka hoʻoponopono ʻana i ka pilikia e like me "No ke aha e hana ʻole ai kēia polokalamu iaʻu?" kāhea ʻia kaulaʻi.
He aha ka strace?
He maʻalahi loa ka noi kumu. Pono ʻoe e holo strace me kekahi kauoha a e hoʻolei ia i nā kelepona ʻōnaehana āpau (ʻoiai ʻo ka mua paha ʻoe e hoʻokomo iā ʻoe iho. kaulaʻi):
$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6) = 6
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
He aha kēia mau kelepona pūnaewele? He mea like kēia me kahi API no ka ʻōnaehana ʻōnaehana hana. I kekahi manawa, loaʻa pololei ka lako polokalamu i ka hāmeʻa i holo ai. Inā, no ka laʻana, pono ia e hōʻike i kekahi mea ma ka pale, ua pāʻani me nā awa a i ʻole nā papa inoa palapala hoʻomanaʻo no nā polokalamu wikiō. I ka wā i kaulana ai nā ʻōnaehana kamepiula multitasking, ua noho aliʻi ka haunaele i ka hakakā ʻana o nā noi like ʻole ma luna o ka lako. Hiki i nā hewa i hoʻokahi noi ke hoʻohaʻahaʻa i nā mea ʻē aʻe, inā ʻaʻole ka ʻōnaehana holoʻokoʻa. A laila ua ʻike ʻia nā ʻano hiʻohiʻona (a i ʻole "ka pale ʻana i ke kani") i ka CPU. Ua lilo ka kernel i mea hoʻohanohano loa: ua loaʻa iā ia ke komo piha i ka hāmeʻa, e hoʻopuka ana i nā noi pono liʻiliʻi i koi mua i ke komo ʻana mai ka kernel e launa pū me ka lako ma o nā kelepona ʻōnaehana.
Ma ka pae binary, ʻokoʻa iki kahi kelepona ʻōnaehana mai kahi kelepona hana maʻalahi, akā hoʻohana ka hapa nui o nā polokalamu i kahi wīwī ma ka waihona maʻamau. ʻO kēlā mau. aia ka waihona maʻamau POSIX C i kahi kelepona hana kākau (), aia i loko o nā code kikoʻī kikoʻī a pau no ke kelepona ʻōnaehana kakau.
I ka pōkole, hoʻokō ʻia kekahi pilina ma waena o kahi noi a me kona kaiapuni (nā ʻōnaehana kamepiula) ma o nā kelepona ʻōnaehana. No laila, ke hana ka polokalamu ma kekahi mīkini akā ʻaʻole ma kahi ʻē aʻe, he mea maikaʻi ke nānā aku i nā hopena hulina kelepona kelepona. ʻOi aku ka kikoʻī, eia kahi papa inoa o nā manawa maʻamau e hiki ke nānā ʻia me ka hoʻohana ʻana i kahi ʻōnaehana kelepona:
- Console I/O
- Pūnaewele I/O
- Loaʻa i ka ʻōnaehana waihona a me ka faila I/O
- Ka mālama ʻana i ke ola o kahi pae kaʻina hana
- Hoʻoponopono hoʻomanaʻo haʻahaʻa haʻahaʻa
- Loaʻa i nā mea hoʻokele ponoʻī
I ka manawa hea e hoʻohana ai i ka strace?
Ma ke kumumanaʻo, kaulaʻi hoʻohana ʻia me kekahi papahana ma kahi o ka mea hoʻohana, no ka mea, pono e hoʻohana ʻia kēlā me kēia papahana i nā mea hoʻohana i nā kelepona ʻōnaehana. ʻOi aku ka maikaʻi me nā papahana haʻahaʻa i hōʻuluʻulu ʻia, akā hana pū me nā ʻōlelo kiʻekiʻe e like me Python inā hiki iā ʻoe ke ʻoki i ka leo hou mai ka runtime a me ka unuhi ʻōlelo.
I kona nani a pau kaulaʻi Hōʻike ʻo ia iā ia iho i ka wā debugging o ka lako polokalamu e hana maikaʻi ana ma ka mīkini hoʻokahi, akā hoʻōki koke i ka hana ʻana ma kekahi, e hana ana i nā memo pohihihi e pili ana i nā faila, nā ʻae, a i ʻole nā hoʻāʻo kūleʻa e hoʻokō i kekahi mau kauoha a i ʻole kekahi mea ʻē aʻe ... hui maikaʻi me nā pilikia kūlana kiʻekiʻe e like me nā hewa hōʻoia hōʻoia. ʻO ka mea maʻamau, pono kēia i kahi hui kaulaʻi, I kekahi manawa
E hoʻohana mākou i kahi kikowaena kūʻokoʻa ma ke ʻano he laʻana, akā hiki ke hana pinepine ʻia ka huli ʻana i nā kelepona ʻōnaehana ma nā kahua hoʻolaha paʻakikī. Pono wale ʻoe e koho i nā mea hana pono.
Laʻana debugging maʻalahi
E ʻōlelo mākou makemake ʻoe e holo i ka noi kikowaena kikowaena foo, a ʻo kēia ka mea āu e hoʻopau ai:
$ foo
Error opening configuration file: No such file or directory
ʻAʻole hiki ke loaʻa ka faila hoʻonohonoho āu i kākau ai. Hana ʻia kēia no ka mea i kekahi manawa i ka wā e hōʻuluʻulu ai nā luna pūʻulu i kahi noi, hoʻopau lākou i nā wahi faila i manaʻo ʻia. A inā ʻoe e hahai i ke alakaʻi hoʻonohonoho no hoʻokahi mahele, ma kahi ʻē aʻe ʻike ʻoe i nā faila ʻokoʻa loa mai kahi āu i manaʻo ai. Hiki ke hoʻoholo ʻia ka pilikia i loko o ʻelua mau kekona inā haʻi ka memo hewa i kahi e ʻimi ai i ka faila hoʻonohonoho, akā ʻaʻole. No laila ma hea kahi e nānā ai?
Inā loaʻa iā ʻoe ke code kumu, hiki iā ʻoe ke heluhelu a ʻike i nā mea āpau. ʻO kahi hoʻolālā hoʻolālā maikaʻi, akā ʻaʻole ka hopena wikiwiki loa. Hiki iā ʻoe ke hoʻohana i kahi debugger step-by-step like gdb a ʻike i ka hana a ka papahana, akā ʻoi aku ka maikaʻi o ka hoʻohana ʻana i kahi hāmeʻa i hoʻolālā ʻia e hōʻike i ka pilina me ke kaiapuni: kaulaʻi.
hopena kaulaʻi Me he mea lā he mea ʻē aʻe, akā ʻo ka nūhou maikaʻi ʻo ka hapa nui o ia mea hiki ke mālama pono ʻia. Hoʻohana pinepine ʻia ka hoʻohana ʻana i ka mea hoʻohana -o e mālama i nā hopena trace i kahi faila ʻokoʻa:
$ 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 +++
Ma kahi o ka ʻaoʻao mua holoʻokoʻa o ka puka kaulaʻi - He hoʻomākaukau haʻahaʻa kēia no ka hoʻomaka ʻana. (Nui nā kelepona mmap, mprotec, quill no nā mea e like me ka ʻike ʻana i ka hoʻomanaʻo haʻahaʻa haʻahaʻa a me ka hōʻike ʻana i nā hale waihona puke kaulaʻi ʻOi aku ka maikaʻi o ka heluhelu ʻana mai ka hope loa. E loaʻa kahi pilikia ma lalo kakau, e hōʻike ana i kahi memo hewa. Nānā mākou i luna a ʻike i ke kelepona ʻōnaehana hewa mua - ke kelepona wehe ʻia, ka mea hoolei hewa ENOENT ("ʻaʻole i loaʻa ka waihona a i ʻole ka papa kuhikuhi") e hoʻāʻo nei e wehe /etc/foo/config.json. ʻO kēia kahi e pono ai ka faila hoʻonohonoho.
He laʻana wale nō kēia, akā e ʻōlelo wau he 90% o ka manawa aʻu e hoʻohana ai kaulaʻi, ʻaʻohe mea ʻoi aku ka paʻakikī e hana ma mua o kēia. Aia ma lalo iho kahi alakaʻi hoʻopau i kēlā me kēia ʻanuʻu:
- E huhū ma muli o kahi leka uila e pili ana i kahi hewa system-y mai kahi papahana
- Hoʻomaka hou i ka polokalamu me kaulaʻi
- E ʻimi i ka memo hewa ma nā hualoaʻa
- E piʻi kiʻekiʻe a hiki i ka wā e paʻi ai ʻoe i ke kelepona ʻōnaehana hāʻule mua
Malia paha e hōʻike ka ʻōnaehana kelepona ma ka ʻanuʻu 4 i ka mea i hewa.
Nā mea kōkua
Ma mua o ka hōʻike ʻana iā ʻoe i kahi laʻana o ka debugging paʻakikī, e hōʻike wau iā ʻoe i kekahi mau hoʻopunipuni no ka hoʻohana pono ʻana kaulaʻi:
ʻO ke kanaka kou hoaaloha
Ma nā ʻōnaehana *nix he nui, hiki ke loaʻa kahi papa inoa piha o nā kelepona ʻōnaehana i ka kernel ma ka holo ʻana kanaka syscalls. E ʻike ʻoe i nā mea like brk(2), 'o ia ho'i, hiki ke loa'a ka 'ike hou aku ma ka holo kanaka 2 brk.
rake liʻiliʻi: kanaka 2 ʻōpuʻu hōʻike mai iaʻu i ka ʻaoʻao no ka pūpū keola () в GNU libc, ka mea, ua hoʻokō 'ia ma ke kahea ana clone(). Kāhea i nā semantics ke'ō e like me ke kākau ʻana i kahi papahana me ka hoʻohana ʻana keola (), a holo i ka trace - ʻaʻole au e ʻike i nā kelepona ke'ō, ma kahi o lākou clone(). Hoʻopili wale ʻia kēlā mau rake iā ʻoe inā hoʻomaka ʻoe e hoʻohālikelike i ke kumu me ka hopena kaulaʻi.
E hoʻohana -o e mālama i ka hopena i kahi faila
kaulaʻi hiki ke hoʻopuka i nā huahana nui, no laila pono e mālama i nā hopena trace i nā faila ʻokoʻa (e like me ka laʻana ma luna). E kōkua pū kēia i ka pale ʻana i ka hoʻopuka ʻana o ka polokalamu me ka hoʻopuka kaulaʻi ma ka console.
E hoʻohana -s no ka ʻike ʻana i nā ʻikepili hoʻopaʻapaʻa hou aʻe
Ua ʻike paha ʻoe ʻaʻole i hōʻike ʻia ka hapa ʻelua o ka memo hewa ma ke ʻano o ka laʻana ma luna. No ka mea kaulaʻi Hōʻike ka default i nā 32 bytes mua o ka hoʻopaʻapaʻa string. Inā makemake ʻoe e ʻike hou aku, e hoʻohui i kekahi mea like -s 128 i ke kahea kaulaʻi.
-y e maʻalahi ka nānā ʻana i nā faila, nā kumu, a pēlā aku.
"He faila nā mea a pau" 'o ia ho'i 'o *nix nā pūnaewele e hana i nā I/O a pau me ka ho'ohana 'ana i nā mea wehewehe waihona, inā pili ia i ka faila a i 'ole ka pūnaewele a i 'ole nā paipu interprocess. He mea maʻalahi kēia no ka hoʻolālā ʻana, akā paʻakikī ka mālama ʻana i nā mea e hana maoli ana ke ʻike ʻoe i nā mea maʻamau heluhelu и kakau ma ka ʻōnaehana kelepona i nā hopena.
Ma ka hoʻohui ʻana i kahi mea hoʻohana -у, e hooikaika oe kaulaʻi e hōʻike i kēlā me kēia file descriptor i ka hopena me kahi memo o kāna mea e kuhikuhi ai.
Hoʻopili i kahi kaʻina hana e holo nei me -p**
E like me kāu e ʻike ai mai ka laʻana ma lalo nei, i kekahi manawa pono ʻoe e ʻimi i kahi papahana e holo nei. Inā ʻike ʻia e holo ana ia e like me ke kaʻina hana 1337 (e ʻōlelo, mai ka puka ps), a laila hiki iā ʻoe ke ʻimi e like me kēia:
$ strace -p 1337
...system call trace output...
Pono paha ʻoe i nā kuleana kumu.
E hoʻohana -f e nānā i nā kaʻina hana keiki
kaulaʻi Ma ka paʻamau, hoʻokahi wale nō kaʻina hana. Inā hoʻopuka kēia kaʻina hana i nā kaʻina keiki, a laila hiki ke ʻike ʻia ke kelepona ʻōnaehana e hoʻoulu i ke kaʻina keiki, akā ʻaʻole e hōʻike ʻia nā kelepona ʻōnaehana o ke keiki.
Inā manaʻo ʻoe aia ka hewa i ke kaʻina hana keiki, e hoʻohana i ka ʻōlelo -f, e hiki ai i kēia ke ʻimi. ʻO ka haʻahaʻa o kēia, ʻo ka hoʻopuka e huikau hou iā ʻoe. I ka manawa kaulaʻi ʻimi i hoʻokahi kaʻina hana a i ʻole hoʻokahi pae, hōʻike ia i kahi kahawai o nā hanana kelepona. Ke ʻimi ʻo ia i nā kaʻina hana he nui i ka manawa hoʻokahi, ʻike paha ʻoe i ka hoʻomaka ʻana o kahi kelepona i keakea ʻia e kahi memo , a laila - he pūʻulu kelepona no nā lālā hoʻokō ʻē aʻe, a laila wale nō - ka hopena o ka mea mua <… hoʻomaka hou ke kelepona. A i ʻole e hoʻokaʻawale i nā hopena trace i nā faila like ʻole, me ka hoʻohana ʻana i ka mea hoʻohana -ff (nā kikoʻī ma
Kānā i nā meheu me -e
E like me kāu e ʻike ai, ʻo ka hopena o ka trace he puʻu maoli o nā kelepona ʻōnaehana āpau. Hae -e Hiki iā ʻoe ke kānana i ka trace (e nānā
ʻAʻole hewa nā hewa a pau
ʻO kahi laʻana maʻalahi a maʻamau he polokalamu e ʻimi ana i kahi faila ma nā wahi he nui i ka manawa hoʻokahi, e like me kahi pūpū e ʻimi ana i kahi papa kuhikuhi i loaʻa kahi faila hiki ke hoʻokō:
$ 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
...
ʻO nā Heuristics e like me "noi hāʻule hope ma mua o ka hōʻike ʻana i kahi hewa" maikaʻi i ka ʻimi ʻana i nā hewa kūpono. E like me ia, he mea kūpono ke hoʻomaka mai ka hopena.
Hiki i nā haʻawina hoʻolālā C ke kōkua iā ʻoe e hoʻomaopopo i nā kelepona ʻōnaehana.
ʻAʻole kelepona ʻōnaehana nā kelepona maʻamau i nā hale waihona puke C, akā he ʻili ʻili lahilahi wale nō. No laila, inā maopopo ʻoe i ka liʻiliʻi pehea a me ka mea e hana ai ma C, e maʻalahi iā ʻoe ke hoʻomaopopo i nā hopena o ka ʻōnaehana kelepona. No ka laʻana, pilikia ʻoe i ka debugging kelepona i nā ʻōnaehana pūnaewele, e nānā i ka maʻamau like
ʻO kahi laʻana debugging paʻakikī
Ua ʻōlelo mua wau ʻo ka hiʻohiʻona o ka debugging maʻalahi kahi hiʻohiʻona o ka mea aʻu e hana nui ai i ka wā e hana ai kaulaʻi. Eia nō naʻe, i kekahi manawa koi ʻia kahi hoʻokolokolo maoli, no laila eia kahi hiʻohiʻona maoli o ka debugging ʻoi aku ka holomua.
# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
ʻAe, ʻo ia hoʻi bcon ua ho'āʻo e kākau i kekahi faila, akā ʻaʻole i holo, a ʻaʻole ʻo ia e ʻae i ke kumu. Ka wehe ʻana kaulaʻi:
# 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 +++
Aia kahi memo hewa kokoke i ka hopena kakau, akā i kēia manawa he mea ʻokoʻa. ʻO ka mea mua, ʻaʻohe hewa kelepona ʻōnaehana pili, ka mea maʻamau ma mua o kēia. ʻO ka lua, ua maopopo ua heluhelu mua kekahi i ka memo hewa. Me he mea lā aia ma kahi ʻē ka pilikia maoli, a bcontab pāʻani wale i ka leka.
Inā ʻoe e nānā kanaka 2 heluhelu, hiki iā ʻoe ke ʻike i ka hoʻopaʻapaʻa mua (3) he file descriptor, kahi i hoʻohana ʻia e *nix no nā hana I/O āpau. Pehea au e ʻike ai i ke ʻano o ka faile descriptor 3? I kēia hihia kūikawā, hiki iā ʻoe ke holo kaulaʻi me ka mea hoʻohana -у (ʻike i luna) a e haʻi ʻokoʻa iā ʻoe, akā no ka ʻike ʻana i nā mea e like me kēia, pono e ʻike pehea e heluhelu ai a hoʻopaʻa i nā hopena trace.
ʻO ke kumu o kahi wehewehe faila hiki ke lilo i hoʻokahi o nā kelepona ʻōnaehana he nui (e pili ana ia i ke ʻano o ka wehewehe ʻana - he console, kahi kumu pūnaewele, kahi faila ponoʻī, a i ʻole kekahi mea ʻē aʻe), akā inā paha, ke ʻimi nei mākou. kelepona ma ka hoʻihoʻi ʻana i 3 (ʻo ia hoʻi. ʻimi mākou i "= 3" i nā hopena huli). I kēia hopena, aia 2 o lākou: wehe ʻia ma luna loa a kumu Ma ka waena. wehe ʻia wehe i ka faila akā kokoke(3) a laila e hōʻike i ka pani hou ʻana. (Rake: hiki ke hoʻohana hou ʻia nā mea wehewehe faila ke wehe ʻia a pani ʻia). Kāhea kumu () kūpono no ka mea ʻo ia ka mea hope ma mua heluhelu(), a ua hoʻololi ʻia ua hana ʻo bcontab me kekahi mea ma o kahi kumu. Hōʻike ka laina aʻe e pili ana ka wehewehe faila me unix domain socket ma ke ala /var/run/bcron-spool.
No laila, pono mākou e ʻimi i ke kaʻina hana e pili ana unix socket ma kela aoao. Aia kekahi mau hoʻopunipuni maʻemaʻe no kēia kumu, pono ia mau mea ʻelua no ka debugging server deployments. ʻO ka mea mua e hoʻohana Netstat a i ʻole ka mea hou aku ss (kūlana socket). Hōʻike nā kauoha ʻelua i nā pilina pūnaewele ikaika o ka ʻōnaehana a lawe i ka ʻōlelo -l e wehewehe i nā kumu hoʻolohe, a me ka mea hoʻohana -p e hōʻike i nā polokalamu i pili i ke kumu ma ke ʻano he mea kūʻai aku. (He nui nā koho kūpono, akā ua lawa kēia mau mea ʻelua no kēia hana.)
# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0 128 /var/run/bcron-spool 1466637 * 0 users:(("unixserver",pid=20629,fd=3))
Hōʻike kēia ʻo ka mea hoʻolohe ke kauoha inixserver, e holo ana me ke kaʻina hana ID 20629. (A, coincidentally, hoʻohana ia i ka file descriptor 3 ma ke kumu.)
Ua kapa ʻia ka lua o ka mea hana pono no ka ʻike ʻana i ka ʻike like lsof. Hoʻopaʻa inoa ia i nā faila wehe (a i ʻole nā descriptors file) ma ka ʻōnaehana. A i ʻole hiki iā ʻoe ke loaʻa ka ʻike e pili ana i kahi faila kikoʻī:
# 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
ʻO ke kaʻina hana 20629 kahi kikowaena lōʻihi, no laila hiki iā ʻoe ke hoʻopili iā ia kaulaʻi hoʻohana i kekahi mea like strace -o /tmp/trace -p 20629. Inā hoʻoponopono ʻoe i kahi hana cron ma kahi pahu ʻē aʻe, e loaʻa iā ʻoe kahi hopena trace me kahi hewa. A eia ka hopena:
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
(Ka hope ʻae () ʻaʻole e hoʻopau ʻia ke ʻimi ʻana.) Eia hou, ʻaʻole i loaʻa i kēia hopena ka hewa a mākou e ʻimi nei. ʻAʻole mākou ʻike i nā memo a bcontag e hoʻouna ai a loaʻa mai paha mai ke kumu. Akā, e hoʻopau i ke kaʻina hana (clone, kali4, SIGCHLD etc.) Hoʻopuka kēia kaʻina hana i kahi kaʻina keiki, e like me kāu e manaʻo ai, hana i ka hana maoli. A inā pono ʻoe e hopu i kona ala, e hoʻohui i ke kelepona strace -f. ʻO kēia ka mea e loaʻa iā mākou ke ʻimi mākou i ka memo hewa i ka hopena hou me 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 +++
I kēia manawa, he mea kēlā. Loaʻa ke kaʻina hana 21470 i kahi hewa "hōʻole ʻia" ke hoʻāʻo nei e hana i kahi faila ma ke ala tmp/spool.21470.1573692319.854640 (e pili ana i ka papa kuhikuhi hana o kēia manawa). Inā ʻike wale mākou i ka papa kuhikuhi hana o kēia manawa, ʻike mākou i ke ala piha a hiki iā mākou ke noʻonoʻo i ke kumu ʻaʻole hiki i ke kaʻina hana ke hana i kāna faila manawaleʻa i loko. ʻO ka mea pōʻino, ua pau ke kaʻina hana, no laila ʻaʻole hiki iā ʻoe ke hoʻohana wale lsof -p 21470 i mea e ʻike ai i ka papa kuhikuhi o kēia manawa, akā hiki iā ʻoe ke hana ma ka ʻaoʻao ʻē aʻe - e ʻimi i nā kelepona ʻōnaehana PID 21470 e hoʻololi i ka papa kuhikuhi. (Inā ʻaʻohe, PID 21470 i hoʻoili iā lākou mai kona makua mai, a ua pau kēia lsof -p ʻAʻole hiki ke ʻike ʻia.) ʻO kēia kelepona ʻōnaehana chdir (he mea maʻalahi ke ʻike me ke kōkua o nā ʻenekini huli pūnaewele hou). A eia ka hopena o nā huli hulina e pili ana i nā hopena trace, a hiki i ka 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 +++
(Inā nalowale ʻoe, makemake paha ʻoe e heluhelu i kaʻu pou mua
# 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
Ma laila e kanu ʻia ai ka ʻīlio! Ke holo nei ke kikowaena ma ke ʻano he cron mea hoʻohana, akā ʻo ke kumu wale nō ka ʻae e kākau i ka papa kuhikuhi /var/spool/cron/tmp/. Kauoha maʻalahi chown cron /var/spool/cron/tmp/ e hooikaika bcon hana pololei. (Inā ʻaʻole ia ka pilikia, a laila ʻo ka mea i manaʻo ʻia he ʻōnaehana palekana kernel e like me SELinux a i ʻole AppArmor, no laila e nānā wau i ka log memo kernel me dmesg.)
Hōʻuluʻulu
Hiki ke paʻakikī nā ʻōkuhi kelepona pūnaewele no ka mea hoʻomaka, akā ke manaʻo nei au ua hōʻike wau he ala wikiwiki lākou e debug i kahi papa holoʻokoʻa o nā pilikia deployment maʻamau. E noʻonoʻo i ka hoʻāʻo ʻana e debug i kahi multiprocess bconme ka hoʻohana ʻana i kahi mea hoʻopau i kēlā me kēia pae.
ʻO ka hoʻopaʻa ʻana i nā hopena i hope ma ke kaulahao kelepona ʻōnaehana pono ke akamai, akā e like me kaʻu i ʻōlelo ai, aneane mau, hoʻohana kaulaʻi, Loaʻa iaʻu ka hopena trace a nānā i nā hewa e hoʻomaka ana mai ka hopena. Eia naʻe, kaulaʻi kōkua iaʻu e mālama i ka manawa nui ma ka debugging. Manaʻo wau he mea pono ia iā ʻoe.
Source: www.habr.com