рдлреЙрд▓рд┐рдВрдЧ рдбрд╛рдЙрди рдж рд░реЕрдмрд┐рдЯ рд╣реЛрд▓: рд╡рди рд╡рд╛рд░реНрдирд┐рд╢ рд░реАрд▓реЛрдб рдЕрдпрд╢рд╕реНрд╡реАрдЪреА рдХрд╣рд╛рдгреА - рднрд╛рдЧ рез

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

тАЬрдЗрдХрдбреЗ рдкрд╛рд╣рд╛,тАЭ рд╕реНрдХреНрд░реАрдирд╡рд░реАрд▓ рдПрдХрд╛ рдЪрд┐рдиреНрд╣рд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реВрди рддреЛ рдореНрд╣рдгрддреЛ, тАЬрдореА рдорд╛рдЭреА рд▓рд╛рд▓ рдЯреЛрдкреА рдШрд╛рд▓рддреЛ рдХреА рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдиреБрдХрддреЗрдЪ рдЬреЗ рдкрд╛рдард╡рд▓реЗ рдЖрд╣реЗ рддреЗ рдпреЗрдереЗ рдЬреЛрдбрд▓реЗ рддрд░,тАЭ рдХреЛрдбрдЪреНрдпрд╛ рджреБрд╕рд░реНтАНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░реВрди, тАЬрддреНрд░реБрдЯреА рдпрд╛рдкреБрдвреЗ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА. рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓."

рдереЛрдбреЗ рдЧреЛрдВрдзрд│рд▓реЗрд▓реЗ рдЖрдгрд┐ рдердХрд▓реЗрд▓реЛ, рдЖрдореНрд╣реА рдХрд╛рд╣реА рдХрд╛рд│ рдХрд╛рдо рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ sed рдПрдХреНрд╕реНрдкреНрд░реЗрд╢рдирдордзреНрдпреЗ рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░рддреЛ, рдлрд╛рдИрд▓ рд╕реЗрд╡реНрд╣ рдХрд░рддреЛ рдЖрдгрд┐ рд░рди рдХрд░рддреЛ systemctl varnish reload. рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢ рдЧрд╛рдпрдм рдЭрд╛рд▓рд╛ рдЖрд╣реЗ...

"рдореА рдЙрдореЗрджрд╡рд╛рд░рд╛рд╕реЛрдмрдд рдИрдореЗрд▓реНрд╕рдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХреЗрд▓реА," рдорд╛рдЭрд╛ рд╕рд╣рдХрд╛рд░реА рдкреБрдвреЗ рдореНрд╣рдгрд╛рд▓рд╛, рддреНрдпрд╛рдЪреЗ рд╣рд╕рдгреЗ рдЖрдирдВрджрд╛рдЪреНрдпрд╛ рдЕрд╕реНрд╕рд▓ рд╣рд╛рд╕реНрдпрд╛рдд рд╡рд╛рдврд▓реЗ, "рдЕрдЪрд╛рдирдХ рдорд╛рдЭреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХреА рд╣реАрдЪ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ!"

рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рд╕реБрд░реВ рдЭрд╛рд▓реЗ

рд▓реЗрдЦрд╛рдд bash, awk, sed рдЖрдгрд┐ systemd рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рд╕рдордЬрддреЗ. рд╡рд╛рд░реНрдирд┐рд╢рдЪреЗ рдЬреНрдЮрд╛рди рдкреНрд░рд╛рдзрд╛рдиреНрдп рджрд┐рд▓реЗ рдЬрд╛рддреЗ, рдкрд░рдВрддреБ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА.
рд╕реНрдирд┐рдкреЗрдЯреНрд╕рдордзреАрд▓ рдЯрд╛рдЗрдорд╕реНрдЯреЕрдореНрдк рдмрджрд▓рд▓реЗ рдЖрд╣реЗрдд.
рд╕рд╣ рд▓рд┐рд╣рд┐рд▓реЗ рднреВрддрд┐рдиреВрд╢рдВрдХрд╛.
рд╣рд╛ рдордЬрдХреВрд░ рджреЛрди рдЖрдард╡рдбреНрдпрд╛рдВрдкреВрд░реНрд╡реА рдЗрдВрдЧреНрд░рдЬреАрдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдореВрд│рдЪрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрд╣реЗ; рднрд╛рд╖рд╛рдВрддрд░ boikoden.

рдЖрдгрдЦреА рдПрдХрд╛ рдЙрдмрджрд╛рд░ рд╢рд░рдж рдЛрддреВрддреАрд▓ рд╕рдХрд╛рд│реА рдкреЕрдиреЛрд░рд╛рдорд┐рдХ рдЦрд┐рдбрдХреНрдпрд╛рдВрдордзреВрди рд╕реВрд░реНрдп рдЪрдордХрддреЛ, рддрд╛рдЬреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдХреЕрдлреАрди рдпреБрдХреНрдд рдкреЗрдп рдПрдХ рдХрдк рдХреАрдмреЛрд░реНрдбрдкрд╛рд╕реВрди рджреВрд░ рд╣реЛрддреЗ, рддреБрдордЪреНрдпрд╛ рд╣реЗрдбрдлреЛрдиреНрд╕рдордзреАрд▓ рдзреНрд╡рдиреА рдЖрд╡рд╛рдЬрд╛рдВрдЪреА рддреБрдордЪреА рдЖрд╡рдбрддреА рд╕рд┐рдореНрдлрдиреА, рдпрд╛рдВрддреНрд░рд┐рдХ рдХреАрдмреЛрд░реНрдбрдЪреНрдпрд╛ рдЧрдЬрдмрдЬреВрди рдмрд╛рд╣реЗрд░ рдкрдбрддреЗ рдЖрдгрд┐ рдкрд╣рд┐рд▓реА рдПрдВрдЯреНрд░реА. рдХрд╛рдирдмрди рдмреЛрд░реНрдбрд╡рд░реАрд▓ рдмреЕрдХрд▓реЙрдЧ рддрд┐рдХрд┐рдЯрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрдордзреНрдпреЗ тАЬрдЗрдиреНрд╡реНрд╣реЗрд╕реНрдЯрд┐рдЧреЗрдЯ рд╡рд╛рд░реНрдирд┐рд╢рд░рд▓реЛрдбтАЭ sh: echo: I/O error in stagingтАЭ (рд╕реНрдЯреЗрдЬрд┐рдВрдЧрдордзреНрдпреЗ тАЬvarnishreload sh: echo: I/O errorтАЭ рдЪреА рдЪреМрдХрд╢реА рдХрд░рд╛) рдпрд╛ рднрдпрдВрдХрд░ рд╢реАрд░реНрд╖рдХрд╛рд╕рд╣ рдЦреЗрд│рдХрд░рдкрдгреЗ рдЪрдордХрддреЗ. рдЬреЗрд╡реНрд╣рд╛ рд╡рд╛рд░реНрдирд┐рд╢рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рддреЗрд╡реНрд╣рд╛ рддреНрд░реБрдЯреАрдВрд╕рд╛рдареА рдЬрд╛рдЧрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдЕрд╕реВ рд╢рдХрдд рдирд╛рд╣реА, рдЬрд░реА рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рд▓реНрдпрд╛ рдирд╛рд╣реАрдд.

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

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

200 рдХрд┐рдореА/рддрд╛рд╕ рд╡реЗрдЧрд╛рдиреЗ рднрд┐рдВрддреАрд╡рд░ рдЖрджрд│рдгреЗ

рдлрд╛рдЗрд▓ рдЙрдШрдбрдд рдЖрд╣реЗ varnishreload, рдбреЗрдмрд┐рдпрди рд╕реНрдЯреНрд░реЗрдЪ рдЪрд╛рд▓рд╡рдгрд╛рд▒реНрдпрд╛ рдПрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░, рдорд▓рд╛ 200 рдУрд│реАрдВрдкреЗрдХреНрд╖рд╛ рдХрдореА рд▓рд╛рдВрдмреАрдЪреА рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рд╕рд▓реА.

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

рд╢реЗрд╡рдЯреА, рд╣рд╛ рдПрдХ рдЯрдкреНрдкрд╛ рдЖрд╣реЗ, рдЬрд░реА рддреЛ рддреБрдЯрд▓рд╛ рддрд░реА рдХреЛрдгреАрд╣реА рддрдХреНрд░рд╛рд░ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА, рдмрд░рдВ... рдЬрд╛рд╕реНрдд рдирд╛рд╣реА. рдореА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рдЯрд░реНрдорд┐рдирд▓рд╡рд░ рдХрд╛рдп рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рдИрд▓ рддреЗ рдкрд╛рд╣рддреЛ, рдкрд░рдВрддреБ рддреНрд░реБрдЯреА рдпрд╛рдкреБрдвреЗ рджрд┐рд╕рдд рдирд╛рд╣реАрдд.

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

рд╕реНрдХреНрд░рд┐рдкреНрдЯ STDOUT рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░реВ рд╢рдХрддреЗ (рд╡рд╛рдкрд░реВрди > &-)? рдХрд┐рдВрд╡рд╛ STDERR? рдпрд╛рдкреИрдХреА рдХрд╛рд╣реАрд╣реА рд╢реЗрд╡рдЯреА рдХрд╛рдореА рдЖрд▓реЗ рдирд╛рд╣реА.

рд╡рд░рд╡рд░ рдкрд╛рд╣рддрд╛ systemd рдХрд╕реЗ рддрд░реА рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╡рд╛рддрд╛рд╡рд░рдг рд╕реБрдзрд╛рд░рддреЗ, рдкрдг рдХрд╕реЗ, рдЖрдгрд┐ рдХрд╛?
рдореА vim рдЙрдШрдбрддреЛ рдЖрдгрд┐ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЛ varnishreload, рдЬреЛрдбреВрди set -x рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреЗ рдбреАрдмрдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд╢ рдЯрд╛рдХреЗрд▓ рдпрд╛ рдЖрд╢реЗрдиреЗ рд╢реЗрдмрд╛рдВрдЧрдЪреНрдпрд╛ рдЦрд╛рд▓реА.

рдлрд╛рдЗрд▓ рджреБрд░реБрд╕реНрдд рдХреЗрд▓реА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдореА рд╡рд╛рд░реНрдирд┐рд╢ рд░реАрд▓реЛрдб рдХреЗрд▓реЗ рдЖрдгрд┐ рдкрд╛рд╣рддреЛ рдХреА рдмрджрд▓рд╛рдиреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдкреВрд░реНрдгрдкрдгреЗ рддреЛрдбрд▓реЗ рдЖрд╣реЗ... рдПрдХреНрдЭреЙрд╕реНрдЯ рд╣рд╛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЧреЛрдВрдзрд│ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ C-рд╕рд╛рд░рдЦреЗ рдХреЛрдб рдЖрд╣реЗрдд. рддреЗ рдХреБрдареЗ рд╕реБрд░реВ рд╣реЛрддреЗ рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ рд╕реНрдХреНрд░реЛрд▓ рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА. рдореА рдкреВрд░реНрдгрдкрдгреЗ рдЧреЛрдВрдзрд│рд▓реЛ рдЖрд╣реЗ. рдбрд┐рдмрдЧрд┐рдВрдЧ рдореЛрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рд▓реЙрдиреНрдЪ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░реВ рд╢рдХрддреЛ? рдирд╛рд╣реА, рд╣рд╛ рдореВрд░реНрдЦрдкрдгрд╛ рдЖрд╣реЗ. рд╢реЗрд▓ рдордзреНрдпреЗ рдмрдЧ? рдЕрдиреЗрдХ рд╕рдВрднрд╛рд╡реНрдп рдкрд░рд┐рд╕реНрдерд┐рддреА рдорд╛рдЭреНрдпрд╛ рдбреЛрдХреНрдпрд╛рдд рдЭреБрд░рд│рд╛рдВрдкреНрд░рдорд╛рдгреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдзрд╛рд╡рдд рдЖрд╣реЗрдд. рдХреЕрдлрд┐рдирдпреБрдХреНрдд рдкреЗрдпрд╛рдЪрд╛ рдХрдк рддрд╛рдмрдбрддреЛрдм рд░рд┐рдХрд╛рдорд╛ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рд╕рд╛рдард╛ рдкреБрдиреНрд╣рд╛ рднрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдпрдВрдкрд╛рдХрдШрд░рд╛рдд рдПрдХ рджреНрд░реБрдд рд╕рд╣рд▓ рдЖрдгрд┐... рдЖрдореНрд╣реА рдирд┐рдШрддреЛ. рдореА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдШрдбрддреЛ рдЖрдгрд┐ рд╢реЗрдмрд╛рдВрдЧ рдЬрд╡рд│реВрди рдкрд╛рд╣рддреЛ: #!/bin/sh.

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

# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jan 24  2017 /bin/sh -> dash

рдПрдХ рдЪрд╛рдЪрдгреА рдореНрд╣рдгреВрди, рдореА shebang рдмрджрд▓рд▓реЗ #!/bin/bash, рд╣рдЯрд╡рд▓реЗ set -x рдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛. рд╢реЗрд╡рдЯреА, рд╡рд╛рд░реНрдирд┐рд╢рдЪреНрдпрд╛ рддреНрдпрд╛рдирдВрддрд░рдЪреНрдпрд╛ рд░реАрдмреВрдЯрд╡рд░, рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдПрдХ рд╕рд╣рди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рддреНрд░реБрдЯреА рджрд┐рд╕реВрди рдЖрд▓реА:

Jan 01 12:00:00 hostname varnishreload[32604]: /usr/sbin/varnishreload: line 124: echo: write error: Broken pipe
Jan 01 12:00:00 hostname varnishreload[32604]: VCL 'reload_20190101_120000_32604' compiled

рдУрд│ 124, рдпреЗрдереЗ рдЖрд╣реЗ!

114 find_vcl_file() {
115         VCL_SHOW=$(varnishadm vcl.show -v "$VCL_NAME" 2>&1) || :
116         VCL_FILE=$(
117                 echo "$VCL_SHOW" |
118                 awk '$1 == "//" && $2 == "VCL.SHOW" {print; exit}' | {
119                         # all this ceremony to handle blanks in FILE
120                         read -r DELIM VCL_SHOW INDEX SIZE FILE
121                         echo "$FILE"
122                 }
123         ) || :
124
125         if [ -z "$VCL_FILE" ]
126         then
127                 echo "$VCL_SHOW" >&2
128                 fail "failed to get the VCL file name"
129         fi
130
131         echo "$VCL_FILE"
132 }

рдкрд░рдВрддреБ рд╣реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА, 124 рдУрд│ рдЕрдЧрджреА рд░рд┐рдХрд╛рдореА рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдд рд░рд╕ рдирд╛рд╣реА. рдореА рдлрдХреНрдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рд╢рдХрддреЛ рдХреА рддреНрд░реБрдЯреА 116 рд╡рд░реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдорд▓реНрдЯреАрд▓рд╛рдЗрди рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рдЖрд▓реА рдЖрд╣реЗ.
рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рд╢реЗрд╡рдЯреА рдХрд╛рдп рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рддреЗ? VCL_FILE рд╡рд░реАрд▓ рдЙрдк-рд╢реЗрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ?

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рддреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреА рд╕рд╛рдордЧреНрд░реА рдкрд╛рдард╡рддреЗ VLC_SHOW, рдкрд╛рдИрдкрджреНрд╡рд╛рд░реЗ рдХрдорд╛рдВрдбрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░реВрди, 115 рдУрд│реАрд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ. рдЖрдгрд┐ рдордЧ рддрд┐рдереЗ рдХрд╛рдп рд╣реЛрддреЗ?

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

рдЙрдк-рд╕рдВрдШ vcl.show -v рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реЗ рд╕рдВрдкреВрд░реНрдг VCL рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ ${VCL_NAME}, STDOUT рд▓рд╛.

рд╡рд░реНрддрдорд╛рди рд╕рдХреНрд░рд┐рдп рд╡реНрд╣реАрд╕реАрдПрд▓ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддрд╕реЗрдЪ рд╡рд╛рд░реНрдирд┐рд╢ рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреНрдпрд╛ рдЕрдиреЗрдХ рдорд╛рдЧреАрд▓ рдЖрд╡реГрддреНрддреНрдпрд╛ рдЬреНрдпрд╛ рдЕрдЬреВрдирд╣реА рдореЗрдорд░реАрдордзреНрдпреЗ рдЖрд╣реЗрдд, рддреБрдореНрд╣реА рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ varnishadm vcl.list, рдЬреНрдпрд╛рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдЦрд╛рд▓реАрд▓ рдкреНрд░рдорд╛рдгреЗ рдЕрд╕реЗрд▓:

discarded   cold/busy       1 reload_20190101_120000_11903
discarded   cold/busy       2 reload_20190101_120000_12068
discarded   cold/busy       16 reload_20190101_120000_12259
discarded   cold/busy       16 reload_20190101_120000_12299
discarded   cold/busy       28 reload_20190101_120000_12357
active      auto/warm       32 reload_20190101_120000_12397
available   auto/warm       0 reload_20190101_120000_12587

рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдп ${VCL_NAME} рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреНрдпрд╛ рджреБрд╕рд░реНрдпрд╛ рднрд╛рдЧрд╛рдд рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ varnishreload рд╕рдзреНрдпрд╛ рд╕рдХреНрд░рд┐рдп VCL рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░, рдЬрд░ рдПрдЦрд╛рджреЗ рдЕрд╕реЗрд▓. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рддреЗ "reload_20190101_120000_12397" рдЕрд╕реЗрд▓.

рдЙрддреНрддрдо, рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ ${VCL_SHOW} рд╡рд╛рд░реНрдирд┐рд╢рд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдЖрддреНрддрд╛рд╕рд╛рдареА рд╕реНрдкрд╖реНрдЯ. рдЖрддрд╛ рдорд▓рд╛ рд╢реЗрд╡рдЯреА рд╕рдордЬрд▓реЗ рдХреА рдбреЕрд╢ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЖрд╣реЗ set -x рдЗрддрдХреЗ рддреБрдЯрд▓реЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ - рддреНрдпрд╛рдд рдкрд░рд┐рдгрд╛рдореА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреА рд╕рд╛рдордЧреНрд░реА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

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

// VCL.SHOW <NUM> <NUM> <FILENAME>

рдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рдХреНрд░рдорд╛рдВрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╛рд╣реАрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрд╛рдЗрд▓ рдирд╛рд╡рд╛рдд рд░рд╕ рдЖрд╣реЗ.

116 рдУрд│реАрдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдХрдорд╛рдВрдбреНрд╕рдЪреНрдпрд╛ рджрд▓рджрд▓реАрдд рд╢реЗрд╡рдЯреА рдХрд╛рдп рд╣реЛрддреЗ?
рдЪрд▓рд╛ рддреЗ рдмрд╛рд╣реЗрд░ рдХрд╛рдвреВрдпрд╛.
рд╕рдВрдШрд╛рдд рдЪрд╛рд░ рднрд╛рдЧ рдЖрд╣реЗрдд:

  1. рд╕рд╛рдзреЗ echo, рдЬреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреЗ рдореВрд▓реНрдп рдореБрджреНрд░рд┐рдд рдХрд░рддреЗ ${VCL_SHOW}
    echo "$VCL_SHOW"
  2. awk, рдЬреА рдПрдХ рдУрд│ (рд░реЗрдХреЙрд░реНрдб) рд╢реЛрдзрддреЗ рдЬрд┐рдереЗ рдордЬрдХреВрд░ рддреЛрдбрд▓реНрдпрд╛рдирдВрддрд░ рдкрд╣рд┐рд▓реЗ рдлреАрд▓реНрдб тАЬ//тАЭ рдЖрд╣реЗ рдЖрдгрд┐ рджреБрд╕рд░реЗ тАЬVCL.SHOWтАЭ рдЖрд╣реЗ.
    Awk рдпрд╛ рдкреЕрдЯрд░реНрдирд╢реА рдЬреБрд│рдгрд╛рд░реА рдкрд╣рд┐рд▓реА рдУрд│ рд▓рд┐рд╣реЗрд▓ рдЖрдгрд┐ рдирдВрддрд░ рд▓рдЧреЗрдЪ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдерд╛рдВрдмрд╡реЗрд▓.

    awk '$1 == "//" && $2 == "VCL.SHOW" {print; exit}'
  3. рдХреЛрдбрдЪрд╛ рдПрдХ рдмреНрд▓реЙрдХ рдЬреЛ рдлреАрд▓реНрдб рд╡реНрд╣реЕрд▓реНрдпреВрдЬ рдкрд╛рдЪ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдордзреНрдпреЗ рд╕реНрдЯреЛрдЕрд░ рдХрд░рддреЛ, рд╕реНрдкреЗрд╕рджреНрд╡рд╛рд░реЗ рд╡рд┐рднрдХреНрдд рдХрд░рддреЛ. рдкрд╛рдЪрд╡реНрдпрд╛ FILE рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рдЙрд░реНрд╡рд░рд┐рдд рдУрд│ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ. рд╢реЗрд╡рдЯреА, рд╢реЗрд╡рдЯрдЪрд╛ рдЗрдХреЛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреА рд╕рд╛рдордЧреНрд░реА рд▓рд┐рд╣рд┐рддреЛ ${FILE}.
    { read -r DELIM VCL_SHOW INDEX SIZE FILE; echo "$FILE" }
  4. рд╕рд░реНрд╡ рдкрд╛рдпрд▒реНрдпрд╛ 1 рддреЗ 3 рд╕рдмрд╢реЗрд▓рдордзреНрдпреЗ рдмрдВрдж рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдореВрд▓реНрдп рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдд рдЖрд╣реЗ $FILE рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд╡рд░ рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рдИрд▓ VCL_FILE.

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

рдореА рдореВрд│ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреНрдпрд╛ рддрд░реНрдХрд╛рд╡рд░ рдЯрд┐рдкреНрдкрдгреА рдХреЗрд▓реА рдЖрд╣реЗ ${VCL_FILE} рдЖрдгрд┐ рдЖрджреЗрд╢ рдХреНрд░рдо рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рдпрд╛рдореБрд│реЗ рдХрд╛рд╣реАрд╣реА рдЭрд╛рд▓реЗ рдирд╛рд╣реА. рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ рдореА рд╕реЗрд╡рд╛ рд╕реБрд░реВ рдХреЗрд▓реА рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдд рдПрдХ рддреНрд░реБрдЯреА рдЖрд▓реА.

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

рддреБрдордЪрд╛ рддрдерд╛рдХрдерд┐рдд рд╕реЗрдб-рдлреВ... рдЦрд░рдВ рддрд░... рдХрдЪрд░рд╛ рдЖрд╣реЗ

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

рдЧреЗрд▓реНрдпрд╛ рд╡реЗрд│реА рдлрдХреНрдд рдХреЛрдб рдмрджрд▓рд▓реНрдпрд╛рдиреЗ рдорджрдд рдЭрд╛рд▓реА рдирд╛рд╣реА, рдореА рдлрдХреНрдд 116 рдУрд│реАрдкрд╛рд╕реВрди рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╡рд┐рджреНрдпрдорд╛рди рдХреЛрдб рдореВрд░реНрдЦ рд╣реЛрддрд╛. рдЖрдгрд┐ рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЕрдЬрд┐рдмрд╛рдд рдЧрд░рдЬ рдирд╛рд╣реА read.

рддреНрд░реБрдЯреА рдкреБрдиреНрд╣рд╛ рдкрд╣рд╛:
sh: echo: broken pipe тАФ рдпрд╛ рдЖрджреЗрд╢рд╛рдд рджреЛрди рдард┐рдХрд╛рдгреА рдкреНрд░рддрд┐рдзреНрд╡рдиреА рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рдорд▓рд╛ рд╢рдВрдХрд╛ рдЖрд╣реЗ рдХреА рдкрд╣рд┐рд▓рд╛ рдмрд╣реБрдзрд╛ рдЧреБрдиреНрд╣реЗрдЧрд╛рд░ рдЖрд╣реЗ (рдХрд┐рдВрд╡рд╛ рдХрд┐рдорд╛рди рдПрдХ рд╕рд╛рдереАрджрд╛рд░). Awk рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рджреЗрдЦреАрд▓ рдкреНрд░реЗрд░рд┐рдд рдХрд░рдд рдирд╛рд╣реА. рдЖрдгрд┐ рдЬрд░ рддреЗ рдЦрд░реЛрдЦрд░рдЪ рдЕрд╕реЗрд▓ рддрд░ awk | {read; echo} рдбрд┐рдЭрд╛рдЗрдирдореБрд│реЗ рдпрд╛ рд╕рд░реНрд╡ рд╕рдорд╕реНрдпрд╛ рдЙрджреНрднрд╡рддрд╛рдд, рддреЗ рдХрд╛ рдмрджрд▓реВ рдирдпреЗ? рд╣реА рдПрдХ-рд▓рд╛рдЗрди рдХрдорд╛рдВрдб awk рдЪреА рд╕рд░реНрд╡ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╡рд╛рдкрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ рд╣реА рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдХ рджреЗрдЦреАрд▓ read рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд

рдЧреЗрд▓реНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдкрд╛рд╕реВрди рдПрдХ рдЕрд╣рд╡рд╛рд▓ рд╣реЛрддрд╛ sed, рдорд▓рд╛ рдорд╛рдЭреА рдирд╡реАрди рдЖрддреНрдорд╕рд╛рдд рдХреЗрд▓реЗрд▓реА рдХреМрд╢рд▓реНрдпреЗ рд╡рд╛рдкрд░реВрди рдкрд╣рд╛рдпрдЪреА рд╣реЛрддреА рдЖрдгрд┐ рд╕реЛрдкреЗ рдмрдирд╡рд╛рдпрдЪреЗ рд╣реЛрддреЗ echo | awk | { read; echo} рдЕрдзрд┐рдХ рд╕рдордЬрдгреНрдпрд╛рдпреЛрдЧреНрдп рдордзреНрдпреЗ echo | sed. рдмрдЧ рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рд╣рд╛ рдирдХреНрдХреАрдЪ рд╕рд░реНрд╡реЛрддреНрддрдо рдорд╛рд░реНрдЧ рдирд╕рд▓рд╛ рддрд░реА, рдорд▓рд╛ рд╡рд╛рдЯрд▓реЗ рдХреА рдореА рдХрд┐рдорд╛рди рдорд╛рдЭреЗ sed-fu рд╡рд╛рдкрд░реВрди рдкрд╣рд╛рд╡реЗ рдЖрдгрд┐ рдХрджрд╛рдЪрд┐рдд рд╕рдорд╕реНрдпреЗрдмрджреНрджрд▓ рдХрд╛рд╣реАрддрд░реА рдирд╡реАрди рд╢рд┐рдХрд╛рд╡реЗ. рд╡рд╛рдЯреЗрдд, рдореА рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рд▓рд╛, рд╕реЗрдб рдЯреЙрдХрдЪреЗ рд▓реЗрдЦрдХ, рдорд▓рд╛ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдо sed рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ.

рдореА рд╕рд╛рдордЧреНрд░реА рдЯрд╛рдХрд▓реА varnishadm vcl.show -v "$VCL_NAME" рдлрд╛рдЗрд▓рд╡рд░, рдЬреЗрдгреЗрдХрд░реВрди рдореА рд╕реЗрд╡рд╛ рд░реАрдмреВрдЯрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЕрдбрдЪрдгреАрд╢рд┐рд╡рд╛рдп sed рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ рд╢рдХреЗрди.

sed рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдирдкреБрдЯрдордзреНрдпреЗ рдиреЗрдордХреЗ рдХрд╕реЗ рд╢реЛрдзрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдпрд╛рдЪреЗ рдереЛрдбрдХреНрдпрд╛рдд рд╡рд░реНрдгрди рддреНрдпрд╛рдЪреЗ GNU рдореЕрдиреНрдпреБрдЕрд▓. sed рд╕реНрддреНрд░реЛрддрд╛рдВрдордзреНрдпреЗ рдЪрд┐рдиреНрд╣ рдЖрд╣реЗ n рд░реЗрд╖рд╛ рд╡рд┐рднрд╛рдЬрдХ рдореНрд╣рдгреВрди рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ.

рдЕрдиреЗрдХ рдкрд╛рд╕рд╛рдВрдордзреНрдпреЗ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рд╕рд╣рдХрд╛рд▒реНрдпрд╛рдЪреНрдпрд╛ рд╢рд┐рдлрд╛рд░рд╢реАрдВрдиреБрд╕рд╛рд░, рдЖрдореНрд╣реА рдПрдХ sed рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рд▓реА рдЬреНрдпрд╛рдиреЗ рд╕рдВрдкреВрд░реНрдг рдореВрд│ рдУрд│ 116 рдкреНрд░рдорд╛рдгреЗрдЪ рдкрд░рд┐рдгрд╛рдо рджрд┐рд▓рд╛.

рдЦрд╛рд▓реА рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рд╕рд╣ рдирдореБрдирд╛ рдлрд╛рдЗрд▓ рдЖрд╣реЗ:

> cat vcl-example.vcl
Text
// VCL.SHOW 0 1578 file with 3 spaces.vcl
More text
// VCL.SHOW 0 1578 file.vcl
Even more text
// VCL.SHOW 0 1578 file with TWOspaces.vcl
Final text

рд╡рд░реАрд▓ рд╡рд░реНрдгрдирд╛рд╡рд░реВрди рд╣реЗ рдХрджрд╛рдЪрд┐рдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдкрд╣рд┐рд▓реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреАрдордзреНрдпреЗ рд░рд╕ рдЖрд╣реЗ // VCL.SHOW, рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдордзреНрдпреЗ рддреНрдпрд╛рдкреИрдХреА рдЕрдиреЗрдХ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рддреНрдпрд╛рдореБрд│реЗ рдкрд╣рд┐рд▓реНрдпрд╛ рд╕рд╛рдордиреНрдпрд╛рдирдВрддрд░ рдореВрд│ рдУрдХ рд╕рдВрдкрддреЛ.

# ╤И╨░╨│ ╨┐╨╡╤А╨▓╤Л╨╣, ╨▓╤Л╨▓╨╡╤Б╤В╨╕ ╤В╨╛╨╗╤М╨║╨╛ ╤Б╤В╤А╨╛╨║╨╕ ╤Б ╨║╨╛╨╝╨╝╨╡╨╜╤В╨░╤А╨╕╤П╨╝╨╕
# ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╤П ╨▓╨╛╨╖╨╝╨╛╨╢╨╜╨╛╤Б╤В╨╕ sed, ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╤В╤Б╤П ╤Б╨╕╨╝╨▓╨╛╨╗-╤А╨░╨╖╨┤╨╡╨╗╨╕╤В╨╡╨╗╤М ╤Б ╨┐╨╛╨╝╨╛╤Й╤М╤О ╨║╨╛╨╜╤Б╤В╤А╤Г╨║╤Ж╨╕╨╕ '#' ╨▓╨╝╨╡╤Б╤В╨╛ ╨╛╨▒╤Л╤З╨╜╨╛ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╨╝╨╛╨│╨╛ '/', ╨╖╨░ ╤Б╤З╤С╤В ╤Н╤В╨╛╨│╨╛ ╨╜╨╡ ╨┐╤А╨╕╨┤╤С╤В╤Б╤П ╤Н╨║╤А╨░╨╜╨╕╤А╨╛╨▓╨░╤В╤М ╨║╨╛╤Б╤Л╨╡ ╨▓ ╨╕╤Б╨║╨╛╨╝╨╛╨╝ ╨║╨╛╨╝╨╝╨╡╨╜╤В╨░╤А╨╕╨╕
# ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╨╡╤В╤Б╤П ╤А╨╡╨│╤Г╨╗╤П╤А╨╜╨╛╨╡ ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╨╡ тАЬ// VCL.SHOWтАЭ, ╨┤╨╗╤П ╨┐╨╛╨╕╤Б╨║╨░ ╤Б╤В╤А╨╛╨║ ╤Б ╨╛╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╜╤Л╨╝ ╤И╨░╨▒╨╗╨╛╨╜╨╛╨╝
# ╤Д╨╗╨░╨│ -n ╨┐╨╛╨╖╨░╨▒╨╛╤В╨╕╤В╤Б╤П ╨╛ ╤В╨╛╨╝, ╤З╤В╨╛╨▒╤Л sed ╨╜╨╡ ╨▓╤Л╨▓╨╛╨┤╨╕╨╗ ╨▓╤Б╨╡ ╨▓╤Е╨╛╨┤╨╜╤Л╨╡ ╨┤╨░╨╜╨╜╤Л╨╡, ╨║╨░╨║ ╨╛╨╜ ╤Н╤В╨╛ ╨┤╨╡╨╗╨░╨╡╤В ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╤Б╨╝. ╤Б╤Б╤Л╨╗╨║╤Г ╨▓╤Л╤И╨╡)
# -E ╨┐╨╛╨╖╨▓╨╛╨╗╤П╨╡╤В ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╤В╤М ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╜╤Л╨╡ ╤А╨╡╨│╤Г╨╗╤П╤А╨╜╤Л╨╡ ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╤П
> cat vcl-processor-1.sed
#// VCL.SHOW#p
> sed -En -f vcl-processor-1.sed vcl-example.vcl
// VCL.SHOW 0 1578 file with 3 spaces.vcl
// VCL.SHOW 0 1578 file.vcl
// VCL.SHOW 0 1578 file with TWOspaces.vcl

# ╤И╨░╨│ ╨▓╤В╨╛╤А╨╛╨╣, ╨▓╤Л╨▓╨╡╤Б╤В╨╕ ╤В╨╛╨╗╤М╨║╨╛ ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
# ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╤П ╨║╨╛╨╝╨░╨╜╨┤╤Г тАЬsubstituteтАЭ, ╤Б ╨│╤А╤Г╨┐╨┐╨░╨╝╨╕ ╨▓╨╜╤Г╤В╤А╨╕ ╤А╨╡╨│╤Г╨╗╤П╤А╨╜╤Л╤Е ╨▓╤Л╤А╨░╨╢╨╡╨╜╨╕╨╣, ╨╛╤В╨╛╨▒╤А╨░╨╢╨░╨╡╤В╤Б╤П ╤В╨╛╨╗╤М╨║╨╛ ╨╜╤Г╨╢╨╜╨░╤П ╨│╤А╤Г╨┐╨┐a
# ╨╕ ╤Н╤В╨╛ ╨┤╨╡╨╗╨░╨╡╤В╤Б╤П ╤В╨╛╨╗╤М╨║╨╛ ╨┤╨╗╤П ╤Б╨╛╨▓╨┐╨░╨┤╨╡╨╜╨╕╨╣, ╤А╨░╨╜╨╡╨╡ ╨╛╨┐╨╕╤Б╨░╨╜╨╜╨╛╨│╨╛ ╨┐╨╛╨╕╤Б╨║╨░
> cat vcl-processor-2.sed
#// VCL.SHOW# {
    s#.* [0-9]+ [0-9]+ (.*)$#1#
    p
}
> sed -En -f vcl-processor-2.sed vcl-example.vcl
file with 3 spaces.vcl
file.vcl
file with TWOspaces.vcl

# ╤И╨░╨│ ╤В╤А╨╡╤В╨╕╨╣, ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╡╤А╨▓╤Л╨╣ ╨╕╨╖ ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В╨╛╨▓
# ╨║╨░╨║ ╨╕ ╨▓ ╤Б╨╗╤Г╤З╨░╨╡ ╤Б awk, ╨┤╨╛╨▒╨░╨▓╨╗╤П╨╡╤В╤Б╤П ╨╜╨╡╨╝╨╡╨┤╨╗╨╡╨╜╨╜╨╛╨╡ ╨╖╨░╨▓╨╡╤А╤И╨╡╨╜╨╕╤П ╨┐╨╛╤Б╨╗╨╡ ╨┐╨╡╤З╨░╤В╨╕ ╨┐╨╡╤А╨▓╨╛╨│╨╛ ╨╜╨░╨╣╨┤╨╡╨╜╨╜╨╛╨│╨╛ ╤Б╨╛╨▓╨┐╨░╨┤╨╡╨╜╨╕╤П
> cat vcl-processor-3.sed
#// VCL.SHOW# {
    s#.* [0-9]+ [0-9]+ (.*)$#1#
    p
    q
}
> sed -En -f vcl-processor-3.sed vcl-example.vcl
file with 3 spaces.vcl

# ╤И╨░╨│ ╤З╨╡╤В╨▓╨╡╤А╤В╤Л╨╣, ╤Б╤Е╨╗╨╛╨┐╨╜╤Г╤В╤М ╨▓╤Б╤С ╨▓ ╨╛╨┤╨╜╨╛╤Б╤В╤А╨╛╤З╨╜╨╕╨║, ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╤П ╨┤╨▓╨╛╨╡╤В╨╛╤З╨╕╤П ╨┤╨╗╤П ╤А╨░╨╖╨┤╨╡╨╗╨╡╨╜╨╕╤П ╨║╨╛╨╝╨░╨╜╨┤
> sed -En -e '#// VCL.SHOW#{s#.* [0-9]+ [0-9]+ (.*)$#1#p;q;}' vcl-example.vcl
file with 3 spaces.vcl

рддрд░, varnishreload рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪреА рд╕рд╛рдордЧреНрд░реА рдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:

VCL_FILE="$(echo "$VCL_SHOW" | sed -En '#// VCL.SHOW#{s#.*[0-9]+ [0-9]+ (.*)$#1#p;q;};')"

рд╡рд░реАрд▓ рддрд░реНрдХ рдереЛрдбрдХреНрдпрд╛рдд рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рдпреЗрдИрд▓.
рдЬрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддреАрд╢реА рдЬреБрд│рдд рдЕрд╕реЗрд▓ // VCL.SHOW, рдирдВрддрд░ рдпрд╛ рдУрд│реАрддреАрд▓ рджреЛрдиреНрд╣реА рд╕рдВрдЦреНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓рд╛ рдордЬрдХреВрд░ рд▓реЛрднрд╕рдкрдгреЗ рдЦрд╛рдКрди рдЯрд╛рдХрд╛ рдЖрдгрд┐ рдпрд╛ рдСрдкрд░реЗрд╢рдирдирдВрддрд░ рдЙрд░рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреА рдЬрддрди рдХрд░рд╛. рд╕рдВрдЧреНрд░рд╣рд┐рдд рдореВрд▓реНрдп рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рдХрд░рд╛.

рд╕рд╛рдзреЗ, рдирд╛рд╣реА рдХрд╛?

рдЖрдореНрд╣реА sed рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдгрд┐ рд╕рд░реНрд╡ рдореВрд│ рдХреЛрдб рдмрджрд▓рд▓реНрдпрд╛рдЪреНрдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдмрджреНрджрд▓ рдЖрдирдВрджреА рд╣реЛрддреЛ. рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡ рдЪрд╛рдЪрдгреНрдпрд╛рдВрдиреА рдЗрдЪреНрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рд▓реЗ, рдореНрд╣рдгреВрди рдореА рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ "рд╡рд╛рд░реНрдирд┐рд╢рд░рд▓реЛрдб" рдмрджрд▓рд▓реЗ рдЖрдгрд┐ рддреЗ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рд▓реЗ systemctl reload varnish. рд╡рд╛рдИрдЯ рдЪреВрдХ echo: write error: Broken pipe рдЖрдордЪреНрдпрд╛ рдЪреЗрд╣рд▒реНрдпрд╛рд╡рд░ рдкреБрдиреНрд╣рд╛ рд╣рд╕рд▓реЗ. рдбреЛрд│реЗ рдорд┐рдЪрдХрд╛рд╡рдгрд╛рд░рд╛ рдХрд░реНрд╕рд░ рдЯрд░реНрдорд┐рдирд▓рдЪреНрдпрд╛ рдЧрдбрдж рд░рд┐рдХрд╛рдордкрдгрд╛рдд рдирд╡реАрди рдХрдорд╛рдВрдб рдПрдВрдЯрд░ рд╣реЛрдгреНрдпрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдд рд╣реЛрддрд╛...

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

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