Te patuiro i te whakatakotoranga rorohiko me te strace

Te patuiro i te whakatakotoranga rorohiko me te strace

Ko taku mahi i ia ra ko te tuku rorohiko te nuinga, ko te tikanga he roa taku wa e ngana ana ki te whakautu i nga patai penei:

  • Ko tenei rorohiko e mahi ana mo te kaiwhakawhanake, engari ehara mo au. He aha?
  • Inanahi nei i mahi tenei rorohiko mo au, engari i tenei ra kaore. He aha?

He momo patuiro tenei he paku rereke mai i te patuiro rorohiko auau. Ko te patuiro i nga wa katoa e pa ana ki te arorau o te waehere, engari ko te whakahekenga tukunga e pa ana ki te taunekeneke i waenga i te waehere me te taiao. Ahakoa ko te putake o te raru he hapa arorau, ko te mea ka mahi nga mea katoa i runga i tetahi miihini kaore i runga i tetahi atu, ko te raruraru kei roto i te taiao.

Na hei utu mo nga taputapu patuiro o mua penei gdb He momo taputapu kee aku mo te tuku i te tuku. A ko taku taputapu tino pai mo te whakatau i te raru penei "He aha te take kaore tenei rorohiko e mahi mo au?" ka karanga aho.

He aha te strace?

aho he taputapu mo te "whakataki waea punaha". I hangaia i te tuatahi mo Linux, engari ka taea ano nga tinihanga patuiro me nga taputapu mo etahi atu punaha (DTrace ranei ktrace).

He tino ngawari te tono taketake. Me whakahaere noa koe i te strace me tetahi whakahau ka whakakorehia e ia nga waea punaha katoa (ahakoa i te tuatahi ka whakauru koe i a koe ano. aho):

$ 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 enei waea punaha? He rite tenei ki te API mo te punaha whakahaere kernel. I tetahi wa, i whai waahi tika te rorohiko ki te taputapu e rere ana. Mena, hei tauira, me whakaatu i tetahi mea ki runga i te mata, ka purei ki nga tauranga, ki nga rehita mahara-mahere mo nga taputapu ataata. I te rongonuitanga o nga punaha rorohiko mahi maha, ka noho hepohepo i te wa e whawhai ana nga momo tono mo te taputapu. Ko nga hapa i roto i tetahi tono ka heke etahi atu, mena kaore i te punaha katoa. Na ka puta mai nga momo mana (he "tiaki mowhiti") i roto i te PTM. Ko te kernel te mea tino whai mana: i whiwhi uru katoa ki te taputapu, na te whakaputa i nga tono iti ake kua tono kia uru mai i te kernel ki te taunekeneke me te taputapu ma te waea punaha.

I te taumata-rua, he paku rereke te waea punaha mai i te waea mahi ngawari, engari ko te nuinga o nga papatono ka whakamahi i te takai kei roto i te whare pukapuka paerewa. Ko era. kei te whare pukapuka paerewa POSIX C he waea mahi tuhi (), kei roto katoa nga waehere hoahoanga-motuhake mo te waea punaha tuhituhi.

Te patuiro i te whakatakotoranga rorohiko me te strace

Hei poto, ko nga taunekeneke i waenga i tetahi tono me tona taiao (nga punaha rorohiko) ka mahia ma nga waea waea. Na reira, ka mahi ana nga rorohiko ki tetahi miihini engari kaua ki tetahi atu, he pai ki te titiro ki nga hua rapu waea a te punaha. Ake ake, koinei te rarangi o nga tohu angamaheni ka taea te wetewete ma te whakamahi i te tohu waea punaha:

  • Papatohu I/O
  • Whatunga I/O
  • Te uru ki te punaha konae me te konae I/O
  • Te whakahaere i te oranga o te miro tukanga
  • Whakahaere mahara taumata-iti
  • Te uru ki nga taraiwa taputapu motuhake

Ahea te whakamahi strace?

I roto i te ariā, aho whakamahia me tetahi papatono i roto i te waahi kaiwhakamahi, na te mea me waea punaha tetahi papatono i te waahi kaiwhakamahi. He pai ake te mahi me nga kaupapa whakahiato, taumata iti, engari ka mahi ano me nga reo taumata teitei penei i te Python mena ka taea e koe te tapahi i te haruru mai i te wa whakahaere me te kaiwhakamaori.

I roto i tona kororia katoa aho ka kitea i te wa o te patuiro o te rorohiko e mahi pai ana i runga i tetahi miihini, engari ka mutu ka mutu te mahi i runga i tetahi atu, ka whakaputa i nga karere koretake mo nga konae, whakaaetanga, ngana kore angitu ranei ki te whakahaere i etahi whakahau, tetahi atu mea ranei... He pouri, engari kaore. he pai te whakakotahi me nga raru taumata teitei penei i nga hapa manatoko tiwhikete. I te nuinga o te waa me whakakotahi tenei ahoi etahi wa titiro me nga taputapu taumata teitei (penei i te taputapu raina whakahau openssl ki te patuiro i te tiwhikete).

Ka whakamahia e matou he tūmau motuhake hei tauira, engari he maha nga wa ka taea te mahi tirotiro waea punaha i runga i nga papaa whakatakotoranga uaua ake. Me whiriwhiri noa nga taputapu tika.

Tauira patuiro ngawari

Me kii kei te pirangi koe ki te whakahaere i te tono tūmau miiharo foo, a koinei te mea ka mutu koe:

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

Te ahua nei kaore i kitea te konae whirihoranga i tuhia e koe. Ka puta tenei na te mea i etahi wa ka whakahiatohia e nga kaiwhakahaere kete he tono, ka takahia e ratou nga waahi konae e tumanakohia ana. A, ki te whai koe i te aratohu whakaurunga mo tetahi tohatoha, i tetahi atu ka kitea e koe he rereke nga konae mai i te waahi i tumanakohia e koe. Ka taea te whakatau i te raru i roto i nga hēkona e rua mena ka korero te karere hapa ki hea ka rapua te konae whirihoranga, engari kaore. Na kei hea te titiro?

Mena ka whai waahi koe ki te waehere puna, ka taea e koe te panui me te rapu i nga mea katoa. He mahere taapiri pai, engari ehara i te otinga tere. Ka taea e koe te haere ki te patuiro-taahiraa penei gdb ka kite he aha te mahi a te hotaka, engari he pai ake te whakamahi i tetahi taputapu i hangaia motuhake hei whakaatu i te taunekeneke me te taiao: aho.

mutunga aho Ko te ahua he nui, engari ko te rongo pai ko te nuinga ka taea te warewarehia. He pai tonu te whakamahi i te kaiwhakahaere -o hei tiaki i nga hua tohu ki tetahi konae motuhake:

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

Tata ki te wharangi tuatahi katoa o te putanga aho - I te nuinga o te wa ko te whakarite taumata iti tenei mo te whakarewatanga. (He maha nga waea mmap, m tiaki, quill mo nga mea penei i te kimi mahara taumata-iti me te whakaatu i nga whare pukapuka hihiri.) Inaa, i te wa e patuiro ana i te putanga aho He pai ake te panui mai i te mutunga. He wero kei raro tuhituhi, e whakaatu ana i te karere hapa. Ka titiro matou ki runga ka kite i te waea pohehe tuatahi - te waea tuwhera, ka maka he hapa ENOENT (“Kore i kitea he konae, he whaiaronga ranei”) e ngana ana ki te whakatuwhera /etc/foo/config.json. Koinei te waahi me noho te konae whirihoranga.

He tauira noa tenei, engari ka kii ahau 90% o te waa ka whakamahia e au aho, kare he mea tino uaua atu i tenei. Kei raro nei he aratohu patuiro taahiraa-i-te-taahiraa:

  • Kia pouri na te korero pohehe mo te hapa o te punaha mai i tetahi papatono
  • Tīmataria anō te hōtaka me te aho
  • Kimihia te karere hapa i roto i nga hua tohu
  • Haere ki runga ake kia pa atu koe ki te waea tuatahi rahua

Ko te mea pea ma te waea punaha i te taahiraa 4 ka whakaatu he aha te he.

Tohutohu

I mua i te whakaatu ki a koe i tetahi tauira o te patuiro uaua ake, ka whakaatu ahau ki a koe etahi tinihanga mo te whakamahi whai hua aho:

Ko te tangata to hoa

I runga i nga punaha *nix maha, he rarangi katoa o nga waea punaha ki te kernel ka taea ma te rere tangata syscalls. Ka kite koe i nga mea penei brk(2), ko te tikanga ka nui ake nga korero ka taea ma te rere tangata 2 brk.

rake iti: tangata 2 marau whakaatu mai ki ahau te wharangi mo te anga marau () в GNU libc, ka puta, ka whakatinanahia ma te karanga clone(). Karanga semantics Toka he rite tonu ki te tuhi koe i tetahi papatono ma te whakamahi marau (), ka rere he tohu - kare au e kitea he waea Toka, hei utu mo ratou clone(). Ko enei rake anake ka raruraru koe ki te timata koe ki te whakataurite i te puna me te putanga aho.

Whakamahia -o hei tiaki i te putanga ki te konae

aho Ka taea e koe te whakaputa i te putanga nui, no reira he pai ki te penapena i nga hua tohu ki nga konae motuhake (penei i te tauira i runga ake nei). Ka awhina ano tenei ki te karo i te pohehe i te putanga o te papatono me te putanga aho i roto i te papatohu.

Whakamahia -s ki te tiro i etahi atu raraunga tohenga

Kua kite pea koe ko te haurua tuarua o te karere hapa kaore i te whakaatuhia ki te tauira tauira o runga. Na te mea aho taunoa e whakaatu ana i nga paita tuatahi 32 o te tautohe aho. Mena kei te pirangi koe ki te kite atu, taapirihia he mea penei -No 128 ki te karanga aho.

-y ka ngawari ake te whai i nga konae, turanga, aha atu.

"He kōnae katoa" te tikanga ko *nix nga punaha e mahi ana i nga I/O katoa ma te whakamahi i nga kaiwhakaahua konae, ahakoa e pa ana ki tetahi konae, ki te whatunga, ki nga paipa whakawhiti ranei. He watea tenei mo te kaupapa, engari he uaua ki te pupuri i nga mea kei te haere tonu ina kite koe i nga mea noa te pānui i и tuhituhi i roto i nga hua tohu waea punaha.

Ma te taapiri i tetahi kaiwhakahaere y, ka kaha koe aho whakamohiotia ia kaiwhakaahua konae i roto i te putanga me te tuhipoka mo nga mea e tohu ana.

Āpiti ki tētahi hātepe e whakahaere kē ana me te -p**

Ka kite koe mai i te tauira i raro nei, i etahi wa ka hiahia koe ki te whai i tetahi papatono kua rere ke. Mena ka mohiohia kei te whakahaere i te tukanga 1337 (me kii, mai i te putanga ps), ka taea e koe te whai i tenei penei:

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

Ka hiahia pea koe ki nga mana pakiaka.

Whakamahia -f ki te aroturuki i nga tukanga tamariki

aho Ma te taunoa, kotahi noa te tukanga e whai ana. Mēnā ka puta mai i tēnei tukanga ngā tukanga tamaiti, ka kitea te waea pūnaha ki te whakaputa i te tukanga tamaiti, engari karekau ngā waea pūnaha a te tukanga tamaiti e whakaatu.

Ki te whakaaro koe kei roto te hapa i te tukanga tamaiti, whakamahia te korero -f, ka taea e tenei te whaiwhai haere. Ko te kino o tenei ko te whakaputanga ka tino raruraru koe. Ina aho ka whai i tetahi tukanga, kotahi miro ranei, e whakaatu ana i te awa kotahi o nga huihuinga karanga. Ina whai i nga tukanga maha i te wa kotahi, ka kite pea koe i te tiimata o te waea ka haukotia e tetahi karere , katahi - he roopu waea mo etahi atu manga mahi, katahi ano - te mutunga o te tuatahi <…Kua timata ano te waea. Wehea ranei nga hua tohu katoa ki nga konae rereke, ma te whakamahi i te kaiwhakahaere -ff (nga korero kei roto ārahitanga i runga i aho).

Tātarihia ngā tohu mā te whakamahi -e

Ka taea e koe te kite, ko te hua o te tohu he tino puranga o nga waea punaha ka taea. Kara -e Ka taea e koe te tarai i te tohu (tirohia rangatira i runga i aho). Ko te painga nui ko te tere ake te whakahaere i tetahi tohu kua tātarihia i te mahi i tetahi tohu katoa katahi Tuhinga o mua`i. Ki te pono, tata tonu kaore au e aro.

Ehara i te mea he kino nga hapa katoa

Ko te tauira ngawari me te noa he papatono e rapu ana i tetahi konae ki nga waahi maha i te wa kotahi, penei i te anga e rapu ana i tetahi raarangi kei roto he konae kawe:

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

He pai nga mahi heuristics penei i te "tono whakamutunga i rahua i mua i te tuku korero he" he pai ki te rapu hapa e tika ana. Ahakoa tera pea, he mea tika kia timata mai i te mutunga.

Ka taea e nga akoranga kaupapa C te awhina i a koe ki te mohio ki nga waea punaha.

Ko nga waea paerewa ki nga whare pukapuka C ehara i te waea punaha, engari he papa angiangi noa. Na, ki te mohio koe ki te pehea me te aha ki te mahi i roto i te C, ka maamaa ake ki a koe te maarama ki nga hua o te tohu waea punaha. Hei tauira, ka raru koe ki te patuiro i nga waea ki nga punaha whatunga, titiro ki te matarohia ano He Aratohu a Bija mo te Whakahoahoa Whatunga.

He tauira patuiro uaua ake

Kua kii ahau ko te tauira o te patuiro ngawari he tauira o nga mea ka mahia e au i te wa e mahi ana ahau aho. Heoi ano, i etahi wa ka hiahiatia he rangahau tuturu, no reira he tauira tuuturu mo te mahi patuiro matatau ake.

bcron - kaiwhakarite mahi mahi, tetahi atu whakatinanatanga o te *nix daemon cron. Kua whakauruhia ki runga i te tūmau, engari ka ngana tetahi ki te whakatika i te raarangi, koinei te mea ka tupu:

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

Ka pai, ko te tikanga bcron I ngana ki te tuhi i tetahi konae, engari kaore i pai, kaore ia e whakaae he aha. Te hura aho:

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

He karere hapa tata ki te mutunga tuhituhi, engari i tenei wa he mea rereke. Tuatahi, karekau he hapa waea a te punaha, ka puta i mua i tenei. Tuarua, e marama ana kua panuitia e tetahi te karere hapa. Te ahua nei ko te tino raruraru kei tetahi atu wahi, a bcontab purei noa i te karere.

Ki te titiro koe ki tangata 2 panui, ka kite koe ko te tohenga tuatahi (3) he kaiwhakaahua konae, e whakamahia ana e *nix mo nga tukatuka I/O katoa. Me pehea taku mohio he aha te konae whakaahuatanga 3 e tohu ana? I tenei keehi, ka taea e koe te rere aho me te kaiwhakahaere y (Tirohia i runga ake nei) a ka korero aunoa ki a koe, engari ki te mohio ki nga mea penei, he pai ki te mohio ki te panui me te tarai i nga hua tohu.

Ko te puna o te kaiwhakaahua konae ko tetahi o nga waea punaha maha (kei runga i te aha te kaiwhakaahua - he papatohu, he turanga whatunga, te konae ake, tetahi atu mea ranei), engari ahakoa tera pea, ka rapu tatou waea ma te whakahoki mai i te 3 (arā. .e. ka rapuhia "= 3" i roto i nga hua rapu). I roto i tenei hua e 2 o ratou: tuwhera i runga rawa me turanga Kei waenganui. tuwhera ka whakatuwhera i te konae engari tata(3) ka whakaatu ka kati ano. (Rake: ka taea te whakamahi ano i nga kaiwhakaahua konae ina whakatuwherahia, ka kati). Karanga pute () he pai na te mea ko te mea whakamutunga i mua panuihia (), a ka puta ko bcontab te mahi me tetahi mea ma te turanga. Ko te rarangi e whai ake nei e whakaatu ana kei te hono te kaiwhakaahua konae turanga rohe unix i te ara /var/run/bcron-spool.

Na, me rapu tatou i te tukanga e pa ana ki turanga unix i tera taha. E rua nga mahi tinihanga mo tenei kaupapa, he pai enei e rua mo te whakakore i nga tukunga tūmau. Ko te tuatahi ko te whakamahi netstat hou ake ranei ss (turanga turanga). Ko nga whakahau e rua e whakaatu ana i nga hononga whatunga kaha o te punaha me te tango i te korero -l ki te whakaahua i nga turanga whakarongo, me te kaiwhakahaere -p hei whakaatu i nga papatono e hono ana ki te turanga hei kaihoko. (He maha atu nga whiringa whaihua, engari he ranea enei e rua mo tenei mahi.)

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

E tohu ana ko te kaiwhakarongo te whakahau inixserver, e rere ana me te tukanga ID 20629. (A, i te tupono, ka whakamahia e ia te whakaahuatanga konae 3 hei turanga.)

Ko te taputapu tuarua tino whai hua mo te rapu i nga korero ano ka kiia Tuhinga o mua. Kei te whakarārangihia nga konae tuwhera katoa (he kaiwhakaahua konae ranei) kei runga i te punaha. Ka taea ranei e koe te tiki korero mo tetahi konae motuhake:

# 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

Ko te Tukanga 20629 he tūmau kua roa te ora, no reira ka taea e koe te hono atu aho te whakamahi i tetahi mea penei strace -o /tmp/trace -p 20629. Mena ka whakatika koe i tetahi mahi cron i tetahi atu tauranga, ka whiwhi koe i tetahi putanga tohu me te hapa. A koinei te hua:

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

(Whakamutunga whakaae () e kore e oti i te wa e whai ana.) Ano, ko te mate, kaore i roto i tenei hua te hapa e rapuhia ana e matou. Kare matou e kite i nga karere ka tukuna mai e bcontag, ka riro mai ranei i te turanga. Engari, whakaotia te mana tukanga (ki tou, tatari4, SIGCHLD me etahi atu) Ko tenei tukanga ka puta he tukanga tamaiti, ka rite ki taau e whakaaro ana, ka tino mahi. A, ki te hiahia koe ki te hopu i tana huarahi, taapiri atu ki te waea strace -f. Koinei te mea ka kitea e tatou ina rapu tatou i te karere hapa i roto i te hua hou me te 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 +++

Inaianei, he mea tera. Ka whiwhi te Tukanga 21470 i te hapa "whakakahoretia te uru" i te wa e ngana ana ki te hanga i tetahi konae i te ara tmp/spool.21470.1573692319.854640 (e pa ana ki te raarangi mahi o naianei). Mena kua mohio noa matou ki te raarangi mahi o naianei, ka mohio ano matou ki te huarahi katoa ka taea e matou te mohio he aha te mahi kaore e taea te hanga i tana konae rangitahi ki roto. Kia aroha mai, kua puta ke te tukanga, no reira e kore e taea e koe te whakamahi noa lsof -p 21470 kia kitea ai te whaiaronga o naianei, engari ka taea e koe te mahi i tera taha - rapua nga waea punaha PID 21470 ka huri i te raarangi. (Mena karekau, kua riro mai i a PID 21470 mai i tona matua, a kua oti tenei lsof -p kaore e kitea.) Ko tenei waea punaha Chdir (he mea ngawari ki te rapu ma te awhina o nga miihini rapu ipurangi hou). Anei te hua o nga rapunga whakamuri i runga i nga hua tohu, tae noa ki te tūmau 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 +++

(Mena kua ngaro koe, ka hiahia pea koe ki te panui i taku panui o mua mo *nix whakahaere tukanga me nga anga.) Na, karekau te PID 20629 i whiwhi whakaaetanga ki te hanga i tetahi konae i te ara /var/spool/cron/tmp/spool.21470.1573692319.854640. Ko te nuinga, ko te take mo tenei ko nga tautuhinga whakaaetanga punaha konae matarohia. Me taki tatou:

# 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

Ko reira te kurī e nehua ai! Ka rere te tūmau hei cron kaiwhakamahi, engari ko te pakiaka anake te mana ki te tuhi ki te whaiaronga /var/spool/cron/tmp/. Te whakahau ngawari chown cron /var/spool/cron/tmp/ ka kaha bcron mahi tika. (Mena ehara tera i te raru, ko te whakapae e whai ake nei ko te kaupapa haumaru kernel penei i a SELinux, AppArmor ranei, no reira ka tirohia e au te raarangi karere kernel me dmesg.)

Te tapeke

Ko nga tohu waea a te punaha ka tino kaha mo te hunga katahi ka timata, engari ko taku tumanako kua whakaatu ahau he huarahi tere ki te patuiro i te roopu katoa o nga raru tuku noa. Whakaarohia e ngana ana ki te patuiro i tetahi tukanga maha bcronte whakamahi i te patuiro-taahiraa.

Ko te whakamuri i nga hua whakamuri i runga i te mekameka waea punaha me mohio, engari i taku korero, tata tonu, ma te whakamahi aho, Ka whiwhi noa ahau i te hua tohu me te rapu hapa ka timata mai i te mutunga. Heoi ano, aho ka awhina ahau ki te whakaora i te wa roa mo te patuiro. Ko taku tumanako ka whai hua ano ki a koe.

Source: will.com

Tāpiri i te kōrero