рд╕реНрдЯреНрд░реЗрд╕рд╕рд╣ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЙрдкрдпреЛрдЬрди

рд╕реНрдЯреНрд░реЗрд╕рд╕рд╣ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЙрдкрдпреЛрдЬрди

рдорд╛рдЭреЗ рджрд┐рд╡рд╕рд╛рдЪреЗ рдХрд╛рдо рдмрд╣реБрддреЗрдХ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЙрдкрдпреЛрдЬрди рдЖрд╣реЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдореА рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдмрд░рд╛рдЪ рд╡реЗрд│ рдШрд╛рд▓рд╡рддреЛ:

  • рд╣реЗ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╡рд┐рдХрд╕рдХрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдирд╛рд╣реА. рдХрд╛?
  • рдХрд╛рд▓ рдпрд╛ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдиреЗ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдХрд╛рдо рдХреЗрд▓реЗ, рдкрд░рдВрддреБ рдЖрдЬ рддреЗ рдирд╛рд╣реА. рдХрд╛?

рд╣реЗ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪреЗ рдбреАрдмрдЧрд┐рдВрдЧ рдЖрд╣реЗ рдЬреЗ рдирд┐рдпрдорд┐рдд рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдбреАрдмрдЧрд┐рдВрдЧрдкреЗрдХреНрд╖рд╛ рдереЛрдбреЗ рд╡реЗрдЧрд│реЗ рдЖрд╣реЗ. рд░реЗрдЧреНрдпреБрд▓рд░ рдбреАрдмрдЧрд┐рдВрдЧ рд╣реЗ рдХреЛрдбрдЪреНрдпрд╛ рд▓реЙрдЬрд┐рдХрдмрджреНрджрд▓ рдЕрд╕рддреЗ, рдкрд░рдВрддреБ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЛрдб рдЖрдгрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдмрджреНрджрд▓ рдЕрд╕рддреЗ. рдЬрд░реА рд╕рдорд╕реНрдпреЗрдЪреЗ рдореВрд│ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯреА рдЕрд╕рд▓реЗ рддрд░реАрд╣реА, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдПрдХрд╛ рдорд╢реАрдирд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЖрдгрд┐ рджреБрд╕рд░реНтАНрдпрд╛рд╡рд░ рдирд╛рд╣реА рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрддреЛ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рддрд░реА рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдЖрд╣реЗ.

рддреНрдпрд╛рдореБрд│реЗ рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдбреАрдмрдЧрд┐рдВрдЧ рдЯреВрд▓реНрд╕рдРрд╡рдЬреА рдЬрд╕реЗ рдЬреАрдбреАрдмреА рдорд╛рдЭреНрдпрд╛рдХрдбреЗ рдбреАрдмрдЧрд┐рдВрдЧ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯрд╕рд╛рдареА рдЯреВрд▓реНрд╕рдЪрд╛ рдПрдХ рд╡реЗрдЧрд│рд╛ рд╕рдВрдЪ рдЖрд╣реЗ. рдЖрдгрд┐ "рд╣реЗ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдХрд╛ рдХрд╛рдо рдХрд░рдд рдирд╛рд╣реА?" рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рдорд╕реНрдпреЗрд▓рд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рдорд╛рдЭреЗ рдЖрд╡рдбрддреЗ рд╕рд╛рдзрди. рдореНрд╣рдгрддрд╛рдд рд╕реНрдЯреНрд░реЗрд╕.

рд╕реНрдЯреНрд░реЗрд╕ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

рд╕реНрдЯреНрд░реЗрд╕ "рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ" рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзрди рдЖрд╣реЗ. рд╣реЗ рдореВрд│рддрдГ рд▓рд┐рдирдХреНрд╕рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рдбреАрдмрдЧрд┐рдВрдЧ рдпреБрдХреНрддреНрдпрд╛ рдЗрддрд░ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рд╕рд╛рдзрдирд╛рдВрд╕рд╣ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд (рдбреАрдЯреНрд░реЗрд╕ рдХрд┐рдВрд╡рд╛ ktrace).

рдореВрд▓рднреВрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдХреЛрдгрддреНрдпрд╛рд╣реА рдХрдорд╛рдВрдбрд╕рд╣ рд╕реНрдЯреНрд░реЗрд╕ рдЪрд╛рд▓рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рд╕рд░реНрд╡ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдбрдВрдк рдХрд░реЗрд▓ (рдЬрд░реА рдкреНрд░рдердо рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕реНрд╡рддрдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рд╕реНрдЯреНрд░реЗрд╕):

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

рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реНрд╕ рдХрд╛рдп рдЖрд╣реЗрдд? рд╣реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдирд▓рд╕рд╛рдареА API рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ. рдПрдХреЗрдХрд╛рд│реА, рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рд▓рд╛ рддреЗ рдЪрд╛рд▓рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╡рд░ рдереЗрдЯ рдкреНрд░рд╡реЗрд╢ рд╣реЛрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕реНрдХреНрд░реАрдирд╡рд░ рдХрд╛рд╣реАрддрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рд╡реНрд╣рд┐рдбрд┐рдУ рдЙрдкрдХрд░рдгрд╛рдВрд╕рд╛рдареА рдкреЛрд░реНрдЯ рдХрд┐рдВрд╡рд╛ рдореЗрдорд░реА-рдореЕрдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЛрдВрджрдгреАрд╕рд╣ рдкреНрд▓реЗ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. рдЬреЗрд╡реНрд╣рд╛ рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рд╕рдВрдЧрдгрдХ рдкреНрд░рдгрд╛рд▓реА рд▓реЛрдХрдкреНрд░рд┐рдп рдЭрд╛рд▓реА, рддреЗрд╡реНрд╣рд╛ рд╡рд┐рд╡рд┐рдз рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╡рд░ рд▓рдврд▓реЗ рдореНрд╣рдгреВрди рдЕрд░рд╛рдЬрдХрддреЗрдиреЗ рд░рд╛рдЬреНрдп рдХреЗрд▓реЗ. рдПрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рддреАрд▓ рддреНрд░реБрдЯреА рдЗрддрд░рд╛рдВрдирд╛ рдЦрд╛рд▓реА рдЖрдгреВ рд╢рдХрддрд╛рдд, рдирд╛рд╣реА рддрд░ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА. рдирдВрддрд░ CPU рдордзреНрдпреЗ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдореЛрдб (рдХрд┐рдВрд╡рд╛ "рд░рд┐рдВрдЧ рд╕рдВрд░рдХреНрд╖рдг") рджрд┐рд╕реВ рд▓рд╛рдЧрд▓реЗ. рдХрд░реНрдирд▓ рд╕рд░реНрд╡рд╛рдд рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗ: рддреНрдпрд╛рд▓рд╛ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдордзреНрдпреЗ рдкреВрд░реНрдг рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рд╛рд▓рд╛, рдХрдореА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬреНрдпрд╛рдВрдирд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рджреНрд╡рд╛рд░реЗ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА рдХрд░реНрдирд▓рдХрдбреВрди рдЖрдзреАрдЪ рдкреНрд░рд╡реЗрд╢рд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рд╛рд╡реА рд▓рд╛рдЧрд▓реА.

рдмрд╛рдпрдирд░реА рд╕реНрддрд░рд╛рд╡рд░, рд╕рд┐рд╕реНрдЯреАрдо рдХреЙрд▓ рд╕рд╛рдзреНрдпрд╛ рдлрдВрдХреНрд╢рди рдХреЙрд▓рдкреЗрдХреНрд╖рд╛ рдереЛрдбрд╛ рд╡реЗрдЧрд│рд╛ рдЕрд╕рддреЛ, рдкрд░рдВрддреБ рдмрд╣реБрддреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕ рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рд░реЕрдкрд░ рд╡рд╛рдкрд░рддрд╛рдд. рддреНрдпрд╛. POSIX C рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдЕрд╕рддреЛ рд▓рд┐рд╣рд╛ (), рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рд╕рд╛рдареА рд╕рд░реНрд╡ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдЕрд╕рддрд╛рдд рд▓рд┐рд╣реВ.

рд╕реНрдЯреНрд░реЗрд╕рд╕рд╣ рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЙрдкрдпреЛрдЬрди

рдереЛрдбрдХреНрдпрд╛рдд, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╡рд╛рддрд╛рд╡рд░рдг (рд╕рдВрдЧрдгрдХ рдкреНрд░рдгрд╛рд▓реА) рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдХреЛрдгрддрд╛рд╣реА рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рджреНрд╡рд╛рд░реЗ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдореНрд╣рдгреВрди, рдЬреЗрд╡реНрд╣рд╛ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдПрдХрд╛ рдорд╢реАрдирд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдкрд░рдВрддреБ рджреБрд╕рд░реНтАНрдпрд╛рд╡рд░ рдирд╛рд╣реА, рддреЗрд╡реНрд╣рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓. рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНтАНрдЯрдкрдгреЗ, рд╕рд┐рд╕реНтАНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕ рд╡рд╛рдкрд░реВрди рд╡рд┐рд╢реНтАНрд▓реЗрд╖рд┐рдд рдХрд░рддрд╛ рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдард░рд╛рд╡рд┐рдХ рдмрд┐рдВрджреВрдВрдЪреА рд╕реВрдЪреА рдпреЗрдереЗ рдЖрд╣реЗ:

  • рдХрдиреНрд╕реЛрд▓ I/O
  • рдиреЗрдЯрд╡рд░реНрдХ I/O
  • рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдНрдХреНрд╕реЗрд╕ рдЖрдгрд┐ рдлрд╛рдЗрд▓ I/O
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдереНрд░реЗрдбрдЪреЗ рдЬреАрд╡рдирдХрд╛рд│ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ
  • рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдореЗрдорд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди
  • рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕ рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢

рд╕реНрдЯреНрд░реЗрд╕ рдХрдзреА рд╡рд╛рдкрд░рд╛рдпрдЪреЗ?

рд╕рд┐рджреНрдзрд╛рдВрддрд╛рдордзреНрдпреЗ, рд╕реНрдЯреНрд░реЗрд╕ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдордзреАрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╣ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдХрд╛рд░рдг рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╕реНрдкреЗрд╕рдордзреАрд▓ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдордиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рд╕рдВрдХрд▓рд┐рдд, рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╣ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рдЖрдкрдг рд░рдирдЯрд╛рдЗрдо рдЖрдгрд┐ рдЗрдВрдЯрд░рдкреНрд░рд┐рдЯрд░рдордзреВрди рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд╛рдЬ рдХрдореА рдХрд░реВ рд╢рдХрдд рдЕрд╕рд▓реНрдпрд╛рд╕ рдкрд╛рдпрдерди рд╕рд╛рд░рдЦреНрдпрд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдВрд╕рд╣ рджреЗрдЦреАрд▓ рдХрд╛рд░реНрдп рдХрд░рддреЗ.

рд╕рд░реНрд╡ рд╡реИрднрд╡рд╛рдд рд╕реНрдЯреНрд░реЗрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░рдЪреНрдпрд╛ рдбреАрдмрдЧрд┐рдВрдЧ рджрд░рдореНрдпрд╛рди рд╕реНрд╡рддрдГрд▓рд╛ рдкреНрд░рдХрдЯ рдХрд░рддреЗ рдЬреЗ рдПрдХрд╛ рдорд╢реАрдирд╡рд░ рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ, рдкрд░рдВрддреБ рдЕрдЪрд╛рдирдХ рджреБрд╕рд░реНтАНрдпрд╛ рдорд╢реАрдирд╡рд░ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдерд╛рдВрдмрд╡рддреЗ, рдлрд╛рдпрд▓реА, рдкрд░рд╡рд╛рдирдЧреНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдХрд╛рд╣реА рдЖрджреЗрд╢ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдЧреЛрд╖реНрдЯреА рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдпрд╢рд╕реНрд╡реА рдкреНрд░рдпрддреНрдирд╛рдВрдмрджреНрджрд▓ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢ рддрдпрд╛рд░ рдХрд░рддреЗ... рд╣реА рдЦреЗрджрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддрд╕реЗ рд╣реЛрдд рдирд╛рд╣реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкрдбрддрд╛рд│рдгреА рддреНрд░реБрдЯреАрдВрд╕рд╛рд░рдЦреНрдпрд╛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдорд╕реНрдпрд╛рдВрд╕рд╣ рдЪрд╛рдВрдЧрд▓реЗ рдПрдХрддреНрд░ рдХрд░рд╛. рд╕рд╣рд╕рд╛ рдпрд╛рд╕рд╛рдареА рд╕рдВрдпреЛрдЬрди рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ рд╕реНрдЯреНрд░реЗрд╕, рдХрдзреАрдХрдзреА ltrace рдЖрдгрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд╕рд╛рдзрдиреЗ (рдЬрд╕реЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЯреВрд▓ openssl рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА).

рдЖрдореНрд╣реА рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рд╕реНрдЯрдБрдбрдЕрд▓реЛрди рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░реВ, рдкрд░рдВрддреБ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрдкрдпреЛрдЬрди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдпреЛрдЧреНрдп рд╕рд╛рдзрдиреЗ рдирд┐рд╡рдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ.

рд╕рд╛рдзреЗ рдбреАрдмрдЧрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг

рд╕рдордЬрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдкреНрд░рддрд┐рдо рд╕рд░реНрд╡реНрд╣рд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рди foo рдЪрд╛рд▓рд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЖрдгрд┐ рддреБрдореНрд╣реА рд╣реЗрдЪ рд╕рдВрдкрд╡рд╛рд▓:

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

рд╡рд░рд╡рд░ рдкрд╛рд╣рддрд╛ рддреБрдореНрд╣реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рд╕рд╛рдкрдбрд▓реА рдирд╛рд╣реА. рдЕрд╕реЗ рдШрдбрддреЗ рдХрд╛рд░рдг рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЬреЗрд╡реНрд╣рд╛ рдкреЕрдХреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рддреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдлрд╛рдЗрд▓ рд╕реНрдерд╛рдиреЗ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░рддрд╛рдд. рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣реА рдПрдХрд╛ рд╡рд┐рддрд░рдгрд╛рд╕рд╛рдареА рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рди рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдлреЙрд▓реЛ рдХрд░рдд рдЕрд╕рд╛рд▓, рддрд░ рджреБрд╕рд░реНтАНрдпрд╛рдордзреНрдпреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрд╛рдЗрд▓реНрд╕ рддреБрдордЪреНрдпрд╛ рдЕрдкреЗрдХреНрд╖реЗрдкреЗрдХреНрд╖рд╛ рдкреВрд░реНрдгрдкрдгреЗ рднрд┐рдиреНрди рдЖрдврд│рддреАрд▓. рдЬрд░ рдПрд░рд░ рдореЗрд╕реЗрдЬрдиреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдИрд▓ рдХреБрдареЗ рд╢реЛрдзрд╛рд╡реА рд╣реЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЕрд╕реЗрд▓ рддрд░ рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдд рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рддрд╕реЗ рд╣реЛрдд рдирд╛рд╣реА. рдордЧ рдХреБрдареЗ рдмрдШрд╛рдпрдЪреЗ?

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рддреЛ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рд╢реЛрдзреВ рд╢рдХрддрд╛. рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдмреЕрдХрдЕрдк рдпреЛрдЬрдирд╛, рдкрд░рдВрддреБ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдЙрдкрд╛рдп рдирд╛рд╣реА. рддреБрдореНрд╣реА рд╕реНрдЯреЗрдк рдмрд╛рдп рд╕реНрдЯреЗрдк рдбреАрдмрдЧрд░рдЪрд╛ рдЕрд╡рд▓рдВрдм рдХрд░реВ рд╢рдХрддрд╛ рдЬреАрдбреАрдмреА рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рдп рдХрд░рддреЛ рддреЗ рдкрд╣рд╛, рдкрд░рдВрддреБ рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рд╢реА рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рджрд░реНрд╢рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢реЗрд╖рддрдГ рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рд╕рд╛рдзрди рд╡рд╛рдкрд░рдгреЗ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдЖрд╣реЗ: рд╕реНрдЯреНрд░реЗрд╕.

рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрдЯреНрд░реЗрд╕ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдЪрд╛рдВрдЧрд▓реА рдмрд╛рддрдореА рдЕрд╢реА рдЖрд╣реЗ рдХреА рдпрд╛рдкреИрдХреА рдмрд╣реБрддреЗрдХ рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА -o рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рдгреЗ рд╕рд╣рд╕рд╛ рдЙрдкрдпреБрдХреНрдд рдЕрд╕рддреЗ:

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

рдЖрдЙрдЯрдкреБрдЯрдЪреЗ рдЕрдВрджрд╛рдЬреЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдердо рдкреГрд╖реНрда рд╕реНрдЯреНрд░реЗрд╕ - рд╣реА рд╕рд╣рд╕рд╛ рд▓реЙрдиреНрдЪрд╕рд╛рдареА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рддрдпрд╛рд░реА рдЕрд╕рддреЗ. (рдЦреВрдк рдХреЙрд▓реНрд╕ mmap, mpprotect, рдХреНрд╡рд┐рд▓ рдХрдореА-рд╕реНрддрд░реАрдп рдореЗрдорд░реА рд╢реЛрдзрдгреЗ рдЖрдгрд┐ рдбрд╛рдпрдиреЕрдорд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрд╕рд╛рдареА.) рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдЖрдЙрдЯрдкреБрдЯ рдбреАрдмрдЧ рдХрд░рддрд╛рдирд╛ рд╕реНрдЯреНрд░реЗрд╕ рдЕрдЧрджреА рд╢реЗрд╡рдЯреВрди рд╡рд╛рдЪрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ. рдЦрд╛рд▓реА рдПрдХ рдЖрд╡реНрд╣рд╛рди рдЕрд╕реЗрд▓ рд▓рд┐рд╣реВ, рдЬреЗ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ. рдЖрдореНрд╣реА рд╡рд░ рдкрд╛рд╣рддреЛ рдЖрдгрд┐ рдкрд╣рд┐рд▓рд╛ рдЪреБрдХреАрдЪрд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкрд╛рд╣рддреЛ - рдХреЙрд▓ рдЙрдШрдбрдгреЗ, рдЬреЗ рдПрд░рд░ рдЯрд╛рдХрддреЗ ENOENT (тАЬрдлрд╛рдЗрд▓ рдХрд┐рдВрд╡рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдкрдбрд▓реА рдирд╛рд╣реАтАЭ) рдЙрдШрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдЖрд╣реЗ /etc/foo/config.json. рдпреЗрдереЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ рдЕрд╕рд╛рд╡реА.

рд╣реЗ рдлрдХреНрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрддреЗ, рдкрд░рдВрддреБ рдореА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡реЗрд│реЗрдкреИрдХреА 90% рдореНрд╣рдгреЗрди рд╕реНрдЯреНрд░реЗрд╕, рдпрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрдареАрдг рдХрд╛рд╣реАрд╣реА рдирд╛рд╣реА. рдЦрд╛рд▓реА рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЪрд░рдг-рджрд░-рдЪрд░рдг рдбреАрдмрдЧрд┐рдВрдЧ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рдЖрд╣реЗ:

  • рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреАрд▓ рд╕рд┐рд╕реНрдЯрдо-рд╡рд╛рдп рддреНрд░реБрдЯреАрдмрджреНрджрд▓ рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢рд╛рдореБрд│реЗ рдЕрд╕реНрд╡рд╕реНрде рд╡реНрд╣рд╛
  • рд╕рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рд╛ рд╕реНрдЯреНрд░реЗрд╕
  • рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдорд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рд╢реЛрдзрд╛
  • рддреБрдореНрд╣реА рдкрд╣рд┐рд▓рд╛ рдЕрдпрд╢рд╕реНрд╡реА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рджрд╛рдмреЗрдкрд░реНрдпрдВрдд рд╡рд░ рдЬрд╛

рд╕реНрдЯреЗрдк 4 рдордзреАрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдордзреНрдпреЗ рдХрд╛рдп рдЪреВрдХ рдЭрд╛рд▓реА рд╣реЗ рдЙрдШрдб рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ.

рдЗрд╢рд╛рд░реЗ

рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреАрдмрдЧрд┐рдВрдЧрдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд╛рдЦрд╡рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рднрд╛рд╡реА рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдХрд╛рд╣реА рдпреБрдХреНрддреНрдпрд╛ рджрд╛рдЦрд╡рддреЛ рд╕реНрдЯреНрд░реЗрд╕:

рдорд╛рдгреВрд╕ рддреБрдордЪрд╛ рдорд┐рддреНрд░ рдЖрд╣реЗ

рдмрд░реНтАНрдпрд╛рдЪ *nix рд╕рд┐рд╕реНрдЯреАрдорд╡рд░, рдХрд░реНрдирд▓рд▓рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реНрд╕рдЪреА рд╕рдВрдкреВрд░реНрдг рдпрд╛рджреА рд░рди рдХрд░реВрди рдорд┐рд│рд╡рддрд╛ рдпреЗрддреЗ рдорд╛рдгреВрд╕ syscalls. рд╕рд╛рд░рдЦреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рддреАрд▓ brk(2), рдореНрд╣рдгрдЬреЗ рдЪрд╛рд▓рд╡реВрди рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рддрд╛ рдпреЗрддреЗ рдорд╛рдгреВрд╕ 2 brk.

рд▓рд╣рд╛рди рд░реЗрдХ: рдорд╛рдгреВрд╕ 2 рдХрд╛рдЯрд╛ рдорд▓рд╛ рд╢реЗрд▓рдЪреЗ рдкреГрд╖реНрда рджрд╛рдЦрд╡рддреЗ рдХрд╛рдЯрд╛ () ╨▓ GNU libc, рдЬреЗ, рддреЗ рдмрд╛рд╣реЗрд░ рд╡рд│рддреЗ, рдХреЙрд▓ рдХрд░реВрди рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддреЗ рдХреНрд▓реЛрди(). рд╕рд┐рдореЗрдВрдЯрд┐рдХреНрд╕рд▓рд╛ рдХреЙрд▓ рдХрд░рд╛ рдХрд╛рдЯрд╛ рд╡рд╛рдкрд░реВрди рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╕ рддреЗрдЪ рд░рд╛рд╣рддреЗ рдХрд╛рдЯрд╛ (), рдЖрдгрд┐ рдЯреНрд░реЗрд╕ рдЪрд╛рд▓рд╡рд╛ - рдорд▓рд╛ рдХреЛрдгрддреЗрд╣реА рдХреЙрд▓ рд╕рд╛рдкрдбрдгрд╛рд░ рдирд╛рд╣реАрдд рдХрд╛рдЯрд╛, рддреНрдпрд╛рдРрд╡рдЬреА рдЕрд╕рддреАрд▓ рдХреНрд▓реЛрди(). рдЬрд░ рддреБрдореНрд╣реА рд╕реНрддреНрд░реЛрддрд╛рдЪреА рдЖрдЙрдЯрдкреБрдЯрд╢реА рддреБрд▓рдирд╛ рдХрд░рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА рддрд░рдЪ рдЕрд╕реЗ рд░реЗрдХ рддреБрдореНрд╣рд╛рд▓рд╛ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрддрд╛рдд рд╕реНрдЯреНрд░реЗрд╕.

рдлрд╛рдИрд▓рдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрд╡реНрд╣ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА -o рд╡рд╛рдкрд░рд╛

рд╕реНрдЯреНрд░реЗрд╕ рд╡рд┐рд╕реНрддреГрдд рдЖрдЙрдЯрдкреБрдЯ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реВ рд╢рдХрддреЗ, рдореНрд╣рдгреВрди рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреЗ рдЕрдиреЗрдХрджрд╛ рдЙрдкрдпреБрдХреНрдд рдард░рддреЗ (рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдкреНрд░рдорд╛рдгреЗ). рд╣реЗ рдЖрдЙрдЯрдкреБрдЯрд╕рд╣ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрдгрд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдЯрд╛рд│рдгреНрдпрд╛рд╕ рджреЗрдЦреАрд▓ рдорджрдд рдХрд░рддреЗ рд╕реНрдЯреНрд░реЗрд╕ рдХрдиреНрд╕реЛрд▓ рдордзреНрдпреЗ.

рдЕрдзрд┐рдХ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдбреЗрдЯрд╛ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА -s рд╡рд╛рдкрд░рд╛

рддреБрдордЪреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдЕрд╕реЗрд▓ рдХреА рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢рд╛рдЪрд╛ рджреБрд╕рд░рд╛ рдЕрд░реНрдзрд╛ рднрд╛рдЧ рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдг рдЯреНрд░реЗрд╕рдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓рд╛ рдЧреЗрд▓рд╛ рдирд╛рд╣реА. рдХрд╛рд░рдг рдЖрд╣реЗ рд╕реНрдЯреНрд░реЗрд╕ рдбреАрдлреЙрд▓реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯрдЪреЗ рдлрдХреНрдд рдкрд╣рд┐рд▓реЗ 32 рдмрд╛рдЗрдЯреНрд╕ рджрд╛рдЦрд╡рддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдкрд╛рд╣рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдЬреЛрдбрд╛ -рдПрд╕ 128 рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдЯреНрд░реЗрд╕.

-y рдлрд╛рдЗрд▓реНрд╕, рд╕реЙрдХреЗрдЯреНрд╕ рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЗ.

"рдСрд▓ рдЗрдЬ рдлрд╛рдЗрд▓" рдореНрд╣рдгрдЬреЗ *рдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯреАрдо рд╕рд░реНрд╡ I/O рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд╛рдкрд░реВрди рдХрд░рддрд╛рдд, рдордЧ рддреЗ рдлрд╛рдЗрд▓ рдХрд┐рдВрд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд┐рдВрд╡рд╛ рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рдкрд╛рдИрдкреНрд╕рд▓рд╛ рд▓рд╛рдЧреВ рд╣реЛрдд рдЕрд╕реЗрд▓. рд╣реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рд╣рддрд╛ рддреЗрд╡реНрд╣рд╛ рдЦрд░реЛрдЦрд░ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рдпрд╛рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдареЗрд╡рдгреЗ рдХрдареАрдг рд╣реЛрддреЗ рд╡рд╛рдЪрд╛ ╨╕ рд▓рд┐рд╣реВ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдорд╛рдВрдордзреНрдпреЗ.

рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбреВрди рд╣реЛрдп, рддреБрдореНрд╣реА рд╕рдХреНрддреА рдХрд░рд╛рд▓ рд╕реНрдЯреНрд░реЗрд╕ рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдИрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░рд▓рд╛ рддреЗ рдХрд╢рд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЗ рдпрд╛рдЪреНрдпрд╛ рдЯрд┐рдкрд╛рдВрд╕рд╣ рднрд╛рд╖реНрдп рдХрд░рд╛.

-p** рд╕рд╣ рдЖрдзреАрдЪ рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рд╛

рдЬрд╕реЗ рдХреА рддреБрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рд╡рд░реВрди рдкрд╣рд╛рд▓, рдХрд╛рд╣реАрд╡реЗрд│рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдкрд╛рд╕реВрди рдЪрд╛рд▓реВ рдЕрд╕рд▓реЗрд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреНрд░реЗрд╕ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ. рдЬрд░ рд╣реЗ рдЬреНрдЮрд╛рдд рдЕрд╕реЗрд▓ рдХреА рддреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 1337 рдореНрд╣рдгреВрди рдЪрд╛рд▓рдд рдЖрд╣реЗ (рдореНрд╣рдгрд╛, рдЖрдЙрдЯрдкреБрдЯрдордзреВрди ps), рдирдВрддрд░ рдЖрдкрдг рддреЗ рдпрд╛рдкреНрд░рдорд╛рдгреЗ рд╢реЛрдзреВ рд╢рдХрддрд╛:

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

рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд░реВрдЯ рдЕрдзрд┐рдХрд╛рд░рд╛рдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реВ рд╢рдХрддреЗ.

рдореБрд▓рд╛рдВрдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА -f рд╡рд╛рдкрд░рд╛

рд╕реНрдЯреНрд░реЗрд╕ рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рддреЗ рдлрдХреНрдд рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЛрдзрддреЗ. рдЬрд░ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдореБрд│реЗ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрдкреЙрдиреНрд╕ рдЭрд╛рд▓реНрдпрд╛, рддрд░ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рд╕реНрдкреЙрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкрд╛рд╣рддрд╛ рдпреЗрдИрд▓, рдкрд░рдВрддреБ рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕рдЪреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реАрдд.

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЯрдд рдЕрд╕реЗрд▓ рдХреА рддреНрд░реБрдЯреА рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрдд рдЖрд╣реЗ, рддрд░ рд╡рд┐рдзрд╛рди рд╡рд╛рдкрд░рд╛ -f, рд╣реЗ рддреНрдпрд╛рдЪреЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рдХреНрд╖рдо рдХрд░реЗрд▓. рдпрд╛рдЪреЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдмрд╛рдЬреВ рдореНрд╣рдгрдЬреЗ рдЖрдЙрдЯрдкреБрдЯ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХреЗрд▓. рдХрдзреА рд╕реНрдЯреНрд░реЗрд╕ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рдВрд╡рд╛ рдПрдХ рдереНрд░реЗрдб рдЯреНрд░реЗрд╕ рдХрд░рддреЗ, рддреЗ рдХреЙрд▓ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪрд╛ рдПрдХрдЪ рдкреНрд░рд╡рд╛рд╣ рджрд░реНрд╢рд╡рд┐рддреЗ. рдЬреЗрд╡реНрд╣рд╛ рддреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрддреЗ, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрджреЗрд╢рд╛рджреНрд╡рд╛рд░реЗ рд╡реНрдпрддреНрдпрдп рдЖрд▓реЗрд▓реНрдпрд╛ рдХреЙрд▓рдЪреА рд╕реБрд░реБрд╡рд╛рдд рджрд┐рд╕реЗрд▓ , рдирдВрддрд░ - рдЗрддрд░ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╢рд╛рдЦрд╛рдВрд╕рд╛рдареА рдХреЙрд▓рдЪрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░рдЪ - рдкрд╣рд┐рд▓реНрдпрд╛рдЪрд╛ рд╢реЗрд╡рдЯ <тАжfoocal рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ>. рдХрд┐рдВрд╡рд╛ рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡ рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рд╛ -ff (рддрдкрд╢реАрд▓ рдордзреНрдпреЗ рдиреЗрддреГрддреНрд╡ рд╡рд░ рд╕реНрдЯреНрд░реЗрд╕).

-e рд╡рд╛рдкрд░реВрди рдЯреНрд░реЗрд╕ рдлрд┐рд▓реНрдЯрд░ рдХрд░рд╛

рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЯреНрд░реЗрд╕рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд░реНрд╡ рд╕рдВрднрд╛рд╡реНрдп рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдЪрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдвреАрдЧ рдЖрд╣реЗ. рдЭреЗрдВрдбрд╛ -e рддреБрдореНрд╣реА рдЯреНрд░реЗрд╕ рдлрд┐рд▓реНрдЯрд░ рдХрд░реВ рд╢рдХрддрд╛ (рдкрд╣рд╛ рдиреЗрддреГрддреНрд╡ рд╡рд░ рд╕реНрдЯреНрд░реЗрд╕). рдореБрдЦреНрдп рдлрд╛рдпрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдкреВрд░реНрдг рдЯреНрд░реЗрд╕ рдХрд░рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдлрд┐рд▓реНрдЯрд░ рдХреЗрд▓реЗрд▓реЗ рдЯреНрд░реЗрд╕ рдЪрд╛рд▓рд╡рдгреЗ рдЬрд▓рдж рдЖрд╣реЗ рдЖрдгрд┐ рдирдВрддрд░ grep`рд╡рд░. рдЦрд░реЗ рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдорд▓рд╛ рдЬрд╡рд│рдЬрд╡рд│ рдиреЗрд╣рдореАрдЪ рдХрд╛рд│рдЬреА рдирд╕рддреЗ.

рд╕рд░реНрд╡рдЪ рдЪреБрдХрд╛ рд╡рд╛рдИрдЯ рдирд╕рддрд╛рдд

рдПрдХ рд╕рд╛рдзреЗ рдЖрдгрд┐ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгрдЬреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рдард┐рдХрд╛рдгреА рдлрд╛рдЗрд▓ рд╢реЛрдзрдд рдЕрд╕рд▓реЗрд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо, рдЬрд╕реЗ рдХреА рдПрдХ рд╢реЗрд▓ рдПрдХ рдбрд┐рд░реЗрдХреНрдЯреНрд░реА рд╢реЛрдзрдд рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓ рдЖрд╣реЗ:

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

рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯреА рд╢реЛрдзрдгреНрдпрд╛рдд "рдПрд░рд░рдЪрд╛ рдЕрд╣рд╡рд╛рд▓ рджреЗрдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╢реЗрд╡рдЯрдЪреА рдЕрдпрд╢рд╕реНрд╡реА рд╡рд┐рдирдВрддреА" рд╕рд╛рд░рдЦреА рд╣реНрдпреБрд░рд┐рд╕реНрдЯрд┐рдХреНрд╕ рдЪрд╛рдВрдЧрд▓реА рдЖрд╣реЗрдд. рддреЗ рдЬрд╕реЗ рдЕрд╕реЛ, рдЕрдЧрджреА рд╢реЗрд╡рдЯрдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреЗ рддрд░реНрдХрд╕рдВрдЧрдд рдЖрд╣реЗ.

рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓реНрд╕ рд╕рдордЬрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реВ рд╢рдХрддрд╛рдд.

рд╕реА рд▓рд╛рдпрдмреНрд░рд░реАрдВрдирд╛ рдХреЗрд▓реЗрд▓реЗ рдорд╛рдирдХ рдХреЙрд▓реНрд╕ рд╣реЗ рд╕рд┐рд╕реНрдЯреАрдо рдХреЙрд▓реНрд╕ рдирд╕рддрд╛рдд, рддрд░ рдлрдХреНрдд рдкрд╛рддрд│ рдкреГрд╖реНрдарднрд╛рдЧ рдЕрд╕рддрд╛рдд. рдореНрд╣рдгреВрди, C рдордзреНрдпреЗ рдХрд╕реЗ рдЖрдгрд┐ рдХрд╛рдп рдХрд░рд╛рд╡реЗ рд╣реЗ рдЖрдкрдг рдереЛрдбреЗрд╕реЗ рд╕рдордЬреВрди рдШреЗрддрд▓реНрдпрд╛рд╕, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕рдЪреЗ рдкрд░рд┐рдгрд╛рдо рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареА рд╕реЛрдкреЗ рд╣реЛрдИрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдХреЙрд▓ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рдд рд╕рдорд╕реНрдпрд╛ рдпреЗрдд рдЖрд╣реЗ, рд╕рдорд╛рди рдХреНрд▓рд╛рд╕рд┐рдХ рдкрд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрд╕рд╛рдареА рдмрд┐рдЬрд╛рдЪреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ.

рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдбреАрдмрдЧрд┐рдВрдЧ рдЙрджрд╛рд╣рд░рдг

рдореА рдЖрдзреАрдЪ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рдЖрд╣реЗ рдХреА рд╕рд╛рдзреНрдпрд╛ рдбреАрдмрдЧрд┐рдВрдЧрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ рдЬреЗ рдорд▓рд╛ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдореБрдЦреНрдпрддрдГ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рд╡реЗ рд▓рд╛рдЧрддреЗ рд╕реНрдЯреНрд░реЗрд╕. рддрдерд╛рдкрд┐, рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рддрдкрд╛рд╕рдгреА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ, рдореНрд╣рдгреВрди рдпреЗрдереЗ рдЕрдзрд┐рдХ рдкреНрд░рдЧрдд рдбреАрдмрдЧрд┐рдВрдЧрдЪреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рдЬреАрд╡рди рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ.

bcron - рдЯрд╛рд╕реНрдХ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╢реЗрдбреНрдпреВрд▓рд░, *рдирд┐рдХреНрд╕ рдбрд┐рдордирдЪреА рджреБрд╕рд░реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХреНрд░реЛрди. рд╣реЗ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдХреЛрдгреАрддрд░реА рд╡реЗрд│рд╛рдкрддреНрд░рдХ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ, рддреЗрд╡реНрд╣рд╛ рдЕрд╕реЗ рд╣реЛрддреЗ:

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

рдареАрдХ рдЖрд╣реЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде bcron рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдИрд▓ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рддреЛ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ рддреЛ рдХрд╛ рдорд╛рдиреНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рдЙрдШрдб рдХрд░рдгреЗ рд╕реНрдЯреНрд░реЗрд╕:

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

рдЕрдЧрджреА рд╢реЗрд╡рдЯреА рдПрдХ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рдЖрд╣реЗ рд▓рд┐рд╣реВ, рдкрдг рдпрд╛рд╡реЗрд│реА рдХрд╛рд╣реАрддрд░реА рд╡реЗрдЧрд│реЗ рдЖрд╣реЗ. рдкреНрд░рдердо, рдХреЛрдгрддреАрд╣реА рд╕рдВрдмрдВрдзрд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рддреНрд░реБрдЯреА рдирд╛рд╣реА, рдЬреА рд╕рд╣рд╕рд╛ рдпрд╛рдЖрдзреА рдпреЗрддреЗ. рджреБрд╕рд░реЗ рдореНрд╣рдгрдЬреЗ, рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ рдХреА рдХреЛрдареЗрддрд░реА рдХреЛрдгреАрддрд░реА рдЖрдзреАрдЪ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рд╡рд╛рдЪрд▓рд╛ рдЖрд╣реЗ. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреБрдареЗрддрд░реА рдЖрд╣реЗ, рдЖрдгрд┐ bcrontab рдлрдХреНрдд рд╕рдВрджреЗрд╢ рдкреНрд▓реЗ рдХрд░рддреЗ.

рдмрдШрд┐рддрд▓реЗ рддрд░ рдорд╛рдгреВрд╕ 2 рд╡рд╛рдЪрд╛, рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдкрд╣рд┐рд▓рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж (3) рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдЖрд╣реЗ, рдЬреЛ *nix рд╕рд░реНрд╡ I/O рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рд╡рд╛рдкрд░рддреЛ. рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ 3 рдХреЛрдгрддреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЛ рд╣реЗ рдХрд╕реЗ рд╢реЛрдзрд╛рдпрдЪреЗ? рдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдкрдг рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рд╕реНрдЯреНрд░реЗрд╕ рдСрдкрд░реЗрдЯрд░ рд╕рд╣ рд╣реЛрдп (рд╡рд░ рдкрд╣рд╛) рдЖрдгрд┐ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдкреЛрдЖрдк рд╕рд╛рдВрдЧреЗрд▓, рдкрд░рдВрддреБ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХрд╕реЗ рд╡рд╛рдЪрд╛рд╡реЗ рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рд╛рд╡реЗ рд╣реЗ рдЬрд╛рдгреВрди рдШреЗрдгреЗ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ.

рдлрд╛рдИрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░рдЪрд╛ рд╕реНрддреНрд░реЛрдд рдЕрдиреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓рдкреИрдХреА рдПрдХ рдЕрд╕реВ рд╢рдХрддреЛ (рд╣реЗ рд╕рд░реНрд╡ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдХрд╢рд╛рд╕рд╛рдареА рдЖрд╣реЗ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ - рдХрдиреНрд╕реЛрд▓, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЙрдХреЗрдЯ, рдлрд╛рдЗрд▓ рд╕реНрд╡рддрдГ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд╣реАрддрд░реА), рдкрд░рдВрддреБ рддреЗ рдЬрд╕реЗ рдЕрд╕реЗрд▓, рдЖрдореНрд╣реА рд╢реЛрдзрддреЛ. 3 рд░рд┐рдЯрд░реНрди рдХрд░реВрди рдХреЙрд▓ рдХрд░рддреЛ (рдореНрд╣рдгрдЬреЗ рдЖрдореНрд╣реА рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдорд╛рдВрдордзреНрдпреЗ тАЬ= 3тАЭ рд╢реЛрдзрддреЛ). рдпрд╛ рдирд┐рдХрд╛рд▓рд╛рдд рддреНрдпрд╛рдкреИрдХреА 2 рдЖрд╣реЗрдд: рдЙрдШрдбрдгреЗ рдЕрдЧрджреА рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдЖрдгрд┐ рд╕реЙрдХреЗрдЯ рдордзреНрдпреЗ. рдЙрдШрдбрдгреЗ рдлрд╛рдЗрд▓ рдЙрдШрдбрддреЗ рдкрдг рдмрдВрдж(3) рдирдВрддрд░ рддреЗ рдкреБрдиреНрд╣рд╛ рдмрдВрдж рдЭрд╛рд▓реНрдпрд╛рдЪреЗ рджрд░реНрд╢рд╡реЗрд▓. (рд░реЗрдХ: рдлрд╛рдИрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдЙрдШрдбрд▓реЗ рдЖрдгрд┐ рдмрдВрдж рдХреЗрд▓реНрдпрд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд). рдХреЙрд▓ рдХрд░рд╛ рд╕реЙрдХреЗрдЯ () рдпреЛрдЧреНрдп рдХрд╛рд░рдг рддреЗ рдЖрдзреАрдЪреЗ рд╢реЗрд╡рдЯрдЪреЗ рдЖрд╣реЗ рд╡рд╛рдЪрд╛(), рдЖрдгрд┐ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА bcrontab рд╕реЙрдХреЗрдЯрджреНрд╡рд╛рд░реЗ рдХрд╛рд╣реАрддрд░реА рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдкреБрдвреАрд▓ рдУрд│ рджрд░реНрд╢рд╡рддреЗ рдХреА рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╕рдВрдмрджреНрдз рдЖрд╣реЗ рдпреБрдирд┐рдХреНрд╕ рдбреЛрдореЗрди рд╕реЙрдХреЗрдЯ рд╡рд╛рдЯреЗрдд /var/run/bcron-sool.

рдореНрд╣рдгреВрди, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдпреБрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛. рдпрд╛ рдЙрджреНрджреЗрд╢рд╛рд╕рд╛рдареА рджреЛрди рдиреАрдЯ рдпреБрдХреНрддреНрдпрд╛ рдЖрд╣реЗрдд, рддреНрдпрд╛ рджреЛрдиреНрд╣реА рд╕рд░реНрд╡реНрд╣рд░ рдЙрдкрдпреЛрдЬрди рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗрдд. рдкреНрд░рдердо рд╡рд╛рдкрд░рдгреЗ рдЖрд╣реЗ рдиреЗрдЯрд╕реНрдЯреЕрдЯ рдХрд┐рдВрд╡рд╛ рдирд╡реАрди ss (рд╕реЙрдХреЗрдЯ рд╕реНрдерд┐рддреА). рджреЛрдиреНрд╣реА рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдордЪреЗ рд╕рдХреНрд░рд┐рдп рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрд╢рди рджрд░реНрд╢рд╡рддрд╛рдд рдЖрдгрд┐ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдШреЗрддрд╛рдд -l рдРрдХрдгреНрдпрд╛рдЪреНрдпрд╛ рд╕реЙрдХреЗрдЯрдЪреЗ рддрд╕реЗрдЪ рдСрдкрд░реЗрдЯрд░рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА -p рдХреНрд▓рд╛рдпрдВрдЯ рдореНрд╣рдгреВрди рд╕реЙрдХреЗрдЯрд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. (рдЖрдгрдЦреА рдмрд░реЗрдЪ рдЙрдкрдпреБрдХреНрдд рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╣реЗ рджреЛрди рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗрдд.)

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

рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рдХреА рд╢реНрд░реЛрддрд╛ рд╣реА рдЖрдЬреНрдЮрд╛ рдЖрд╣реЗ inixserver, рдкреНрд░реЛрд╕реЗрд╕ рдЖрдпрдбреА 20629 рд╕рд╣ рдЪрд╛рд▓рдд рдЖрд╣реЗ. (рдЖрдгрд┐, рдпреЛрдЧрд╛рдпреЛрдЧрд╛рдиреЗ, рддреЗ рд╕реЙрдХреЗрдЯ рдореНрд╣рдгреВрди рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ 3 рд╡рд╛рдкрд░рддреЗ.)

рд╕рдорд╛рди рдорд╛рд╣рд┐рддреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рджреБрд╕рд░реЗ рдЦрд░реЛрдЦрд░ рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдзрди рдореНрд╣рдгрддрд╛рдд lsof. рд╣реЗ рд╕рд┐рд╕реНрдЯрдорд╡рд░реАрд▓ рд╕рд░реНрд╡ рдЦреБрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА (рдХрд┐рдВрд╡рд╛ рдлрд╛рдЗрд▓ рд╡рд░реНрдгрдирдХрд░реНрддрд╛) рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ. рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдЗрд▓рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡реВ рд╢рдХрддрд╛:

# 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

рдкреНрд░рдХреНрд░рд┐рдпрд╛ 20629 рд╣рд╛ рджреАрд░реНрдШрдХрд╛рд│ рдЪрд╛рд▓рдгрд╛рд░рд╛ рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рддреНрдпрд╛рд╕ рд╕рдВрд▓рдЧреНрди рдХрд░реВ рд╢рдХрддрд╛ рд╕реНрдЯреНрд░реЗрд╕ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рд╡рд╛рдкрд░рдгреЗ strace -o /tmp/trace -p 20629. рддреБрдореНрд╣реА рджреБрд╕рд░реНтАНрдпрд╛ рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ рдХреНрд░реЙрди рдЬреЙрдм рд╕рдВрдкрд╛рджрд┐рдд рдХреЗрд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрд░реБрдЯреАрд╕рд╣ рдЯреНрд░реЗрд╕ рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд│реЗрд▓. рдЖрдгрд┐ рдпреЗрдереЗ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗ:

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

(рд╢реЗрд╡рдЯрдЪреЗ рд╕реНрд╡реАрдХрд╛рд░рд╛ () рдЯреНрд░реЗрд╕ рдХрд░рддрд╛рдирд╛ рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЬрд╛рдгрд╛рд░ рдирд╛рд╣реА.) рдкреБрдиреНрд╣рд╛, рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдпрд╛ рдирд┐рдХрд╛рд▓рд╛рдд рдЖрдореНрд╣реА рд╢реЛрдзрдд рдЕрд╕рд▓реЗрд▓реА рддреНрд░реБрдЯреА рдирд╛рд╣реА. bcrontag рд╕реЙрдХреЗрдЯрд▓рд╛ рдкрд╛рдард╡рддреЛ рдХрд┐рдВрд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ рдЕрд╕реЗ рдХреЛрдгрддреЗрд╣реА рд╕рдВрджреЗрд╢ рдЖрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рдд рдирд╛рд╣реАрдд. рддреНрдпрд╛рдРрд╡рдЬреА, рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдВрддреНрд░рдг (рдХреНрд▓реЛрди, рдкреНрд░рддреАрдХреНрд╖рд╛4, SIGCHLD рдЗ.) рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ рдЬрдиреНрдо рджреЗрддреЗ, рдЬреА рддреБрдордЪреНрдпрд╛ рдЕрдВрджрд╛рдЬрд╛рдкреНрд░рдорд╛рдгреЗ рдЦрд░реЗ рдХрд╛рдо рдХрд░рддреЗ. рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддрд┐рдЪрд╛ рдорд╛рдЧ рдкрдХрдбрд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ рддрд░ рдХреЙрд▓рдордзреНрдпреЗ рдЬреЛрдбрд╛ strace -f. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдирд╡реАрди рдирд┐рдХрд╛рд▓рд╛рдд рд╕реНрдЯреНрд░реЗрд╕рд╕рд╣ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рд╢реЛрдзрддреЛ рддреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗрдЪ рд╕рд╛рдкрдбреЗрд▓ -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 +++

рдЖрддрд╛, рддреЗ рдХрд╛рд╣реАрддрд░реА рдЖрд╣реЗ. рдорд╛рд░реНрдЧрд╛рд╡рд░ рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рдкреНрд░реЛрд╕реЗрд╕ 21470 рд▓рд╛ "рдкреНрд░рд╡реЗрд╢ рдирд╛рдХрд╛рд░рд▓рд╛" рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ tmp/sool.21470.1573692319.854640 (рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд). рдЬрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдзреНрдпрд╛рдЪреА рдХрд╛рд░реНрдпрд░рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдорд╛рд░реНрдЧ рджреЗрдЦреАрд▓ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓ рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреНрдпрд╛рдд рддрд╛рддреНрдкреБрд░рддреА рдлрд╛рдЗрд▓ рдХрд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рдд рд╕рдХреНрд╖рдо рд╣реЛрдК. рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдзреАрдЪ рдмрд╛рд╣реЗрд░ рдкрдбрд▓реА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдЖрдкрдг рдлрдХреНрдд рд╡рд╛рдкрд░реВ рд╢рдХрдд рдирд╛рд╣реА lsof -p 21470 рд╡рд░реНрддрдорд╛рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рдкрд░рдВрддреБ рдЖрдкрдг рдЙрд▓рдЯ рджрд┐рд╢реЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛ - PID 21470 рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд╢реЛрдзрд╛ рдЬреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрджрд▓рддрд╛рдд. (рдХреЛрдгрддреЗрд╣реА рдирд╕рд▓реНрдпрд╛рд╕, PID 21470 рдиреЗ рддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдкрд╛рд▓рдХрд╛рдВрдХрдбреВрди рд╡рд╛рд░рд╕рд╛рд╣рдХреНрдХрд╛рдиреЗ рдорд┐рд│рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рд╣реЗ рдЖрдзреАрдЪ рдЭрд╛рд▓реЗ рдЖрд╣реЗ. lsof -p рд╢реЛрдзрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.) рд╣рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЖрд╣реЗ chdir (рдЬреЗ рдЖрдзреБрдирд┐рдХ рдСрдирд▓рд╛рдЗрди рд╢реЛрдз рдЗрдВрдЬрд┐рдирдЪреНрдпрд╛ рдорджрддреАрдиреЗ рд╢реЛрдзрдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ). рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░ 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 +++

(рддреБрдореНрд╣реА рд╣рд░рд╡рд▓реЗ рдЕрд╕рд╛рд▓ рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рдЭреА рдорд╛рдЧреАрд▓ рдкреЛрд╕реНрдЯ рд╡рд╛рдЪрд╛рдпрдЪреА рдЕрд╕реЗрд▓ *рдирд┐рдХреНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЖрдгрд┐ рд╢реЗрд▓реНрд╕ рдмрджреНрджрд▓рддреНрдпрд╛рдореБрд│реЗ, рд╕рд░реНрд╡реНрд╣рд░ PID 20629 рд▓рд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдорд┐рд│рд╛рд▓реА рдирд╛рд╣реА. /var/sool/cron/tmp/sool.21470.1573692319.854640. рдмрд╣реБрдзрд╛, рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдХреНрд▓рд╛рд╕рд┐рдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░рд╡рд╛рдирдЧреА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдЖрд╣реЗ. рдЪрд▓рд╛ рддрдкрд╛рд╕реВрдпрд╛:

# 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

рддрд┐рдереЗрдЪ рдХреБрддреНрд░рд╛ рдкреБрд░рд▓рд╛! рд╕рд░реНрд╡реНрд╣рд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреНрд░реЙрди рдореНрд╣рдгреВрди рдЪрд╛рд▓рддреЛ, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рд░реВрдЯрд▓рд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрд╡рд░ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЖрд╣реЗ /var/sool/cron/tmp/. рд╕рд╛рдзреА рдЖрдЬреНрдЮрд╛ chown cron /var/spool/cron/tmp/ рд╕рдХреНрддреА рдХрд░реЗрд▓ bcron рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░рд╛. (рдЬрд░ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╕реЗрд▓, рддрд░ рдкреБрдвреАрд▓ рдмрд╣реБрдзрд╛ рд╕рдВрд╢рдпрд┐рдд SELinux рдХрд┐рдВрд╡рд╛ AppArmor рд╕рд╛рд░рдЦреЗ рдХрд░реНрдирд▓ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдореА рдХрд░реНрдирд▓ рд╕рдВрджреЗрд╢ рд▓реЙрдЧ рддрдкрд╛рд╕реВ. dmesg.)

рдПрдХреВрдг

рд╕рд┐рд╕реНрдЯреАрдо рдХреЙрд▓ рдЯреНрд░реЗрд╕ рдирд╡рд╢рд┐рдХреНрдпрд╛рд╕рд╛рдареА рдЬрдмрд░рджрд╕реНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдореА рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЖрд╣реЗ рдХреА рддреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЬрди рд╕рдорд╕реНрдпрд╛рдВрдЪрд╛ рд╕рдВрдкреВрд░реНрдг рд╡рд░реНрдЧ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рджреНрд░реБрдд рдорд╛рд░реНрдЧ рдЖрд╣реЗ. рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕ рдбреАрдмрдЧ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ bcronрдЪрд░рдг-рджрд░-рдЪрд░рдг рдбреАрдмрдЧрд░ рд╡рд╛рдкрд░рдгреЗ.

рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЪреЗрдирдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдЯреНрд░реЗрд╕ рдирд┐рдХрд╛рд▓рд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреМрд╢рд▓реНрдп рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЬрд╡рд│рдЬрд╡рд│ рдиреЗрд╣рдореАрдЪ, рд╡рд╛рдкрд░рдгреЗ рд╕реНрдЯреНрд░реЗрд╕, рдорд▓рд╛ рдлрдХреНрдд рдЯреНрд░реЗрд╕ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рддреЛ рдЖрдгрд┐ рд╢реЗрд╡рдЯрдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд▒реНрдпрд╛ рддреНрд░реБрдЯреА рд╢реЛрдзрддреЛ. рдЕрд╕реЛ, рд╕реНрдЯреНрд░реЗрд╕ рдорд▓рд╛ рдбреАрдмрдЧрд┐рдВрдЧрд╡рд░ рдмрд░рд╛рдЪ рд╡реЗрд│ рд╡рд╛рдЪрд╡рд┐рдгреНрдпрд╛рдд рдорджрдд рдХрд░рддреЗ. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рджреЗрдЦреАрд▓ рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛