«ΠΠΎΡΠΌΠΎΡΡΠΈ Π²ΠΎΡ ΡΡΠ΄Π°,» β Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π½Π° ΡΠΊΡΠ°Π½Π΅ β «Π‘ΠΏΠΎΡΠΈΠΌ Π½Π° ΠΌΠΎΡ ΠΊΡΠ°ΡΠ½ΡΡ ΡΠ»ΡΠΏΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π²ΠΎΡ ΡΡΠ΄Π° ΡΠΎ, ΡΡΠΎ Ρ ΡΠ΅Π±Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΡΠ»Π°Π»» β ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° β «ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ.»
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ·Π°Π΄Π°ΡΠ΅Π½Π½ΡΠΉ ΠΈ ΡΡΡΠ°Π²ΡΠΈΠΉ, Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡ sed Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ, ΡΠΎΡ
ΡΠ°Π½ΡΡ ΡΠ°ΠΉΠ» ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Ρ systemctl varnish reload
. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈΡΡΠ΅Π·Π»ΠΎ…
«ΠΠ΅ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π»ΡΡ Ρ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠΌ,» ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅Π³Π°, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΡ ΠΌΡΠ»ΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠ°Π΅Ρ Π² Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΠ±ΠΊΡ ΠΏΠΎΠ»Π½ΡΡ ΡΠ°Π΄ΠΎΡΡΠΈ, «ΠΠΎ ΠΌΠ΅Π½Ρ Π²Π΄ΡΡΠ³ Π΄ΠΎΡΠ»ΠΎ ΡΡΠΎ ΡΡΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°!»
Π‘ ΡΠ΅Π³ΠΎ ΠΎΠ½ΠΎ Π²ΡΡ Π½Π°ΡΠΈΠ½Π°Π»ΠΎΡΡ
Π‘ΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΎΠ² ΡΠ°Π±ΠΎΡΡ bash, awk, sed ΠΈ systemd. ΠΠ½Π°Π½ΠΈΠ΅ varnish ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ, Π½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ.
ΠΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΊΠΈ Π² ΡΠ½ΠΈΠΏΠΏΠ΅ΡΠ°Ρ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ.
ΠΠ°ΠΏΠΈΡΠ°Π½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ
ΠΡΠΎΡ ΡΠ΅ΠΊΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π°, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Π½Π°Π·Π°Π΄; ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄
Π‘ΠΎΠ»Π½ΡΠ΅ ΠΏΡΠΎΡΠ²Π΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΊΠ²ΠΎΠ·Ρ ΠΏΠ°Π½ΠΎΡΠ°ΠΌΠ½ΡΠ΅ ΠΎΠΊΠ½Π° ΠΎΡΠ΅ΡΠ΅Π΄Π½ΡΠΌ ΡΡΠΏΠ»ΡΠΌ ΠΎΡΠ΅Π½Π½ΠΈΠΌ ΡΡΡΠΎΠΌ, ΡΠ°ΡΠΊΠ° ΡΠ²Π΅ΠΆΠ΅ΠΏΡΠΈΠ³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ΅ΠΈΠ½ΠΎΠΌ Π½Π°ΠΏΠΈΡΠΊΠ° ΠΏΠΎΠΊΠΎΠΈΡΡΡ Π² ΡΡΠΎΡΠΎΠ½Π΅ ΠΎΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΡ, Π² Π½Π°ΡΡΠ½ΠΈΠΊΠ°Ρ Π·Π²ΡΡΠΈΡ Π»ΡΠ±ΠΈΠΌΠ°Ρ ΡΠΈΠΌΡΠΎΠ½ΠΈΡ Π·Π²ΡΠΊΠΎΠ², ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠ°Ρ ΡΠ΅Π»Π΅ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡ, ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΠΈΠΊΠ΅ΡΠΎΠ² Π±ΡΠΊΠ»ΠΎΠ³Π° Π½Π° ΠΊΠ°Π½Π±Π°Π½ Π΄ΠΎΡΠΊΠ΅ ΠΈΠ³ΡΠΈΠ²ΠΎ ΡΠ²Π΅ΡΠΈΡΡΡ ΡΡΠ΄ΡΠ±ΠΎΠ½ΠΎΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ βInvestigate varnishreload sh: echo: I/O error in stagingβ (Π Π°ΡΡΠ»Π΅Π΄ΡΠΉΡΠ΅ βvarnishreload sh: echo: I/O errorβ Π² ΡΡΠ΅ΠΉΠ΄ΠΆΠ΅). ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡ Π·Π°Ρ ΠΎΠ΄ΠΈΡ ΠΎ varnish-Π΅, ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ Π½Π΅Ρ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅ΡΡΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π²ΡΠ»ΠΈΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
ΠΠ»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌ Ρ
ΠΠ°ΠΊ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΠΊΠ΅ΡΠ°, ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π° ΡΡΠ΅ΠΉΠ΄ΠΆΠ΅, Π° ΡΠ°ΠΊ ΠΊΠ°ΠΊ Ρ Π±ΡΠ» ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ varnish-Π° Π½Π° ΡΡΠ΅ΠΉΠ΄ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ», ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π»ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. Π’Π°ΠΊ, ΠΏΡΠΎΡΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΏΠ°Π²ΡΠ΅Π΅ Π² ΡΠΆΠ΅ Π·Π°ΠΊΡΡΡΡΠΉ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠ΅ΡΡ ΡΠΈΠΊΠ΅Ρ ΡΠ΅Π±Π΅, Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΠΈ, ΡΡΠΎ Ρ Π΅Π³ΠΎ ΠΎΡΠΌΠ΅ΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· 30 ΠΌΠΈΠ½ΡΡ, ΠΏΠΎΡ Π»ΠΎΠΏΠ°Ρ ΡΠ°ΠΌ ΡΠ΅Π±Ρ ΠΏΠΎ ΠΏΠ»Π΅ΡΡ Π·Π° ΠΎΡΠΈΡΡΠΊΡ Π±ΠΎΡΠ΄Ρ ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ Ρ Π»Π°ΠΌΠ° ΠΈ Π²Π΅ΡΠ½ΡΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌ Π΄Π΅Π»Π°ΠΌ.
ΠΡΠ΅Π·Π°ΡΡΡ Π² ΡΡΠ΅Π½Ρ Π½Π° ΡΠΊΠΎΡΠΎΡΡΠΈ 200 ΠΊΠΌ/Ρ
ΠΡΠΊΡΡΠ² ΡΠ°ΠΉΠ» varnishreload
, Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Debian Stretch, Ρ ΡΠ²ΠΈΠ΄Π΅Π» ΡΠ΅Π»Π» ΡΠΊΡΠΈΠΏΡ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΌΠ΅Π½Π΅Π΅ 200 ΡΡΡΠΎΠΊ.
ΠΡΠΎΠ±Π΅ΠΆΠ°Π²ΡΠΈΡΡ ΠΏΠΎ ΡΠΊΡΠΈΠΏΡΡ, Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ» Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π²ΡΠ»ΠΈΡΡΡΡ Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΌ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ· ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², ΡΡΠΎ ΡΡΠ΅ΠΉΠ΄ΠΆ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΈ ΡΠ»ΠΎΠΌΠ°Π΅ΡΡΡ, Π½ΠΈΠΊΡΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ, Π½Ρβ¦ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΠ°ΠΏΡΡΠΊΠ°Ρ ΡΠΊΡΠΈΠΏΡ ΠΈ ΡΠΌΠΎΡΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π», Π²ΠΎΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΆΠ΅ ΠΈ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.
ΠΡΠ΅ ΠΏΠ°ΡΡ Π·Π°ΠΏΡΡΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΡ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, ΠΈ Ρ Π½Π°ΡΠΈΠ½Π°Ρ ΠΏΡΠΈΠ΄ΡΠΌΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΠΊΠΈ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠΎΠΆΠ΅Ρ ΡΠΊΡΠΈΠΏΡΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΡ STDOUT (Ρ ΠΏΠΎΠΌΠΎΡΡΡ > &-
)? ΠΠ»ΠΈ STDERR? ΠΠΈ ΡΠΎ Π½ΠΈ Π΄ΡΡΠ³ΠΎΠ΅ Π² ΠΈΡΠΎΠ³Π΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, systemd ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ΅Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°, Π½ΠΎ ΠΊΠ°ΠΊ, ΠΈ, ΠΏΠΎΡΠ΅ΠΌΡ?
ΠΡΡΠ±Π°Ρ vim ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡ varnishreload
, Π΄ΠΎΠ±Π°Π²Π»ΡΡ set -x
ΠΏΡΡΠΌΠΎ ΠΏΠΎΠ΄ ΡΠ΅Π±Π°Π½Π³, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π΄Π΅Π±Π°Π³ Π²ΡΠ²ΠΎΠ΄ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΡΠΎΠ»ΡΡΡ ΡΡΡΠΎΡΠΊΡ ΡΠ²Π΅ΡΠ°.
Π€Π°ΠΉΠ» ΠΏΠΎΠΏΡΠ°Π²Π»Π΅Π½, ΡΠ°ΠΊ ΡΡΠΎ Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Ρ varnish ΠΈ Π²ΠΈΠΆΡ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°ΡΠΈΡΡΠΎ Π²ΡΡ ΡΠ»ΠΎΠΌΠ°Π»ΠΎβ¦ ΠΡΡ
Π»ΠΎΠΏ β ΠΏΠΎΠ»Π½ΡΠΉ Π±Π°ΡΠ΄Π°ΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ½Π½Ρ Π‘ΠΈ-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ°ΠΆΠ΅ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π³Π΄Π΅ ΠΎΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ. Π― Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π΅. ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΡ
Π² ΡΠΊΡΠΈΠΏΡΠ΅? ΠΠ΅Ρ, Π±ΡΠ΅Π΄. ΠΠ°Π³ Π² ΡΠ΅Π»Π»Π΅? ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π½Π΅ΡΡΡΡΡ Π² ΠΌΠΎΠ΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΊΠ°ΠΊ ΡΠ°ΡΠ°ΠΊΠ°Π½Ρ Π² ΡΠ°Π·Π½ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ. Π§Π°ΡΠΊΠ° ΠΊΠΎΡΠ΅ΠΈΠ½ΠΎ-ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π½Π°ΠΏΠΈΡΠΊΠ° ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΎΠΏΡΡΡΠΎΡΠ°Π΅ΡΡΡ, Π±ΡΡΡΡΠΎΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Π½Π° ΠΊΡΡ
Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΠ°ΡΠ° ΠΈβ¦ ΠΏΠΎΠ΅Ρ
Π°Π»ΠΈ. Π― ΠΎΡΠΊΡΡΠ²Π°Ρ ΡΠΊΡΠΈΠΏΡ ΠΈ ΠΏΡΠΈΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡ ΠΊ ΡΠ΅Π±Π°Π½Π³Ρ: #!/bin/sh
.
/bin/sh
β ΡΡΠΎ Π²Π΅Π΄Ρ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ Π½Π° bash, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π² POSIX-ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π²Π΅ΡΠ½ΠΎ? ΠΠ΅ ΡΡΡ-ΡΠΎ Π±ΡΠ»ΠΎ! ΠΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Debian β ΡΡΠΎ dash, ΠΈ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, Π½Π° ΡΡΠΎ /bin/sh
.
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jan 24 2017 /bin/sh -> dash
ΠΡΠΎΠ±Ρ ΡΠ°Π΄ΠΈ, Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠ΅Π±Π°Π½Π³ Π½Π° #!/bin/bash
, ΡΠ΄Π°Π»ΠΈΠ» set -x
ΠΈ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π΅ΡΡ ΡΠ°Π·. ΠΠ°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ, ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ varnish-Π°, Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΠ½ΠΎΡΠ½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°:
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
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° varnish, Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ varnish-Π° Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°.
ΠΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° vcl.show -v
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π²ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ VCL, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ${VCL_NAME}
, Π² STDOUT.
Π§ΡΠΎΠ±Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ VCL, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
Π²Π΅ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈ varnish-Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ 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}
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΄Π»Ρ varnish, ΠΏΠΎΠΊΠ° ΡΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Ρ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΠ½ΡΠ», ΠΏΠΎΡΠ΅ΠΌΡ Π²ΡΠ²ΠΎΠ΄ dash Ρ set -x
ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΡΠ°ΠΊΠΈΠΌ Π±ΠΈΡΡΠΌ β ΠΎΠ½ Π²ΠΊΠ»ΡΡΠ°Π» Π² ΡΠ΅Π±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅ΠΉΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π½Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ VCL ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅ΠΏΠ»Π΅Π½Π° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°ΠΉΠ»ΠΎΠ². ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π² Π‘ΠΈ ΡΡΠΈΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΎΠ΄Π½ΠΈ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Π΄ΡΡΠ³ΠΈΠ΅, ΠΈ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΠΎ ΡΠ΅ΠΌ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π²ΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½Π°Ρ Π½ΠΈΠΆΠ΅ ΡΡΡΠΎΠΊΠ° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ
Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ:
// VCL.SHOW <NUM> <NUM> <FILENAME>
Π¦ΠΈΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π½Π΅ Π²Π°ΠΆΠ½Ρ, Π½Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°.
Π§ΡΠΎ ΠΆΠ΅ Π² ΠΈΡΠΎΠ³Π΅ ΡΠ²ΠΎΡΠΈΡΡΡ Π² Π±ΠΎΠ»ΠΎΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠΌΡΡ Π½Π° ΡΡΡΠΎΠΊΠ΅ 116?
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ.
ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ
ΡΠ°ΡΡΠ΅ΠΉ:
- ΠΡΠΎΡΡΠΎΠ΅
echo
, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ${VCL_SHOW}
echo "$VCL_SHOW"
awk
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠ΅Ρ ΡΡΡΠΎΠΊΡ (Π·Π°ΠΏΠΈΡΡ), Π³Π΄Π΅ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°, Π±ΡΠ΄Π΅Ρ β//β, Π° Π²ΡΠΎΡΡΠΌ β «VCL.SHOW».
Awk Π²ΡΠΏΠΈΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠΈΠΌ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ, Π° Π·Π°ΡΠ΅ΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ.awk '$1 == "//" && $2 == "VCL.SHOW" {print; exit}'
- ΠΠ»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π² ΠΏΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ. ΠΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ FILE ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΡΠΎΠΊΠΈ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ echo Π²ΡΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ
${FILE}
.{ read -r DELIM VCL_SHOW INDEX SIZE FILE; echo "$FILE" }
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΡΠ°Π³ΠΈ Ρ 1 ΠΏΠΎ 3 Π·Π°ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΠ°Π±-ΡΠ΅Π»Π», Π²ΡΠ²ΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
$FILE
Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡVCL_FILE
.
ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° 119-ΠΉ ΡΡΡΠΎΠΊΠ΅, ΡΡΠΎ ΡΠ»ΡΠΆΠΈΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ: Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° VCL Π±ΡΠ΄Π΅Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΉΠ»Ρ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΏΡΠΎΠ±Π΅Π»Π° Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ.
Π― Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π»Ρ ${VCL_FILE}
ΠΈ ΠΏΠΎΠΏΡΡΠ°Π»ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΠΎ ΡΡΠΎ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π»ΠΎ. Π£ ΠΌΠ΅Π½Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΡΠΈΡΡΠΎ, Π° Π² ΡΠ»ΡΡΠ°Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²ΠΈΡΠ° Π²ΡΠ΄Π°Π²Π°Π»ΠΎ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΡΡΠΎ Π½Π΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π²ΡΡΡΠ½ΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΠ΅ 30 ΠΌΠΈΠ½ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΈΡΡ ΡΠΆΠ΅ ΡΠ°Π· ΡΠ΅ΡΡΡ ΠΈ, Π² Π΄ΠΎΠ²Π΅ΡΠΎΠΊ, ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΎΡΠΎΠ΄Π²ΠΈΠ½ΡΠ²ΡΠ°Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π΅Π»Π° Π² ΡΡΠΎΡΠΎΠ½Ρ. ΠΡΡΠ°Π²ΡΠ°ΡΡΡ ΡΠ°ΡΡΡ Π½Π΅Π΄Π΅Π»ΠΈ Π±ΡΠ»Π° Π·Π°Π±ΠΈΡΠ° ΡΠ°ΠΌΡΠΌΠΈ ΡΠ°Π·Π½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΈ Π±ΡΠ»Π° Π»ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄ΠΎΠΌ ΠΎ sed ΠΈ ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠΌ. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ Π² varnishreload
Π±ΡΠ»Π° Π±Π΅Π·Π²ΠΎΠ·Π²ΡΠ°ΡΠ½ΠΎ ΡΡΠ΅ΡΡΠ½Π° Π² ΠΏΠ΅ΡΠΊΠ°Ρ
Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ°ΡΠ΅ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ sed-ΡΡβ¦ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅β¦ Π΄ΡΡΠ½Ρ
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½Π΅Π΄Π΅Π»Π΅ Π²ΡΠ΄Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ Π΄Π΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠ½ΠΎΠ²Π° ΡΠ΅ΡΠΈΠ» Π·Π°Π½ΡΡΡΡΡ ΡΡΠΈΠΌ ΡΠΈΠΊΠ΅ΡΠΎΠΌ. Π― Π½Π°Π΄Π΅ΡΠ»ΡΡ, ΡΡΠΎ Π² ΠΌΠΎΡΠΌ ΠΌΠΎΠ·Π³Ρ, ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΎΠ½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΊΠ°Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ Π² ΡΡΠΎΡ ΡΠ°Π· Ρ ΡΠΆ ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΉΠΌΡ Π² ΡΡΠΌ Π΄Π΅Π»ΠΎ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π· ΠΏΡΠΎΡΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ, Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ΡΠΈΠ» Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ 116-ΠΉ ΡΡΡΠΎΠΊΠΈ. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π±ΡΠ» Π΄ΡΡΠΊΠΎΠ²Π°ΡΡΠΌ. Π Π² Π½ΡΠΌ Π½Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ read
.
ΠΠ»ΡΠ΄Ρ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ Π΅ΡΠ΅ ΡΠ°Π·:
sh: echo: broken pipe
β Π² ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ echo Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π΄Π²ΡΡ
ΠΌΠ΅ΡΡΠ°Ρ
, Π½ΠΎ Ρ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, ΡΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ β Π±ΠΎΠ»Π΅Π΅ Π²Π΅ΡΠΎΡΡΠ½ΡΠΉ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊ (Π½Ρ ΠΈΠ»ΠΈ Ρ
ΠΎΡΡ-Π±Ρ ΡΠΎΡΡΠ°ΡΡΠ½ΠΈΠΊ). Awk ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π²Π½ΡΡΠ°Π΅Ρ Π΄ΠΎΠ²Π΅ΡΠΈΡ. Π Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΎ awk | {read; echo}
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΡΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ Π΅Ρ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ? ΠΡΠ° ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ awk, Π΄Π° Π΅ΡΡ ΠΈ ΡΡΠΎΡ Π»ΠΈΡΠ½ΠΈΠΉ read
Π² Π΄ΠΎΠ²Π΅ΡΠΎΠΊ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π° ΠΏΡΠΎΡΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅ Π±ΡΠ» Π΄ΠΎΠΊΠ»Π°Π΄ ΠΎ sed
, Ρ Ρ
ΠΎΡΠ΅Π» ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΈ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π½Π°Π²ΡΠΊΠΈ ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ echo | awk | { read; echo}
Π² Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ echo | sed
. Π₯ΠΎΡΡ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ Π»ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΡ ΡΠ²ΠΎΠ΅ sed-fu ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ·Π½Π°Ρ ΡΡΠΎ-ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΠΎ Ρ
ΠΎΠ΄Ρ Π΄Π΅Π»Π° Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ» ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³Ρ, Π°Π²ΡΠΎΡΠ° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎ sed, ΠΏΠΎΠΌΠΎΡΡ ΠΌΠ½Π΅ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ sed ΡΠΊΡΠΈΠΏΡ.
Π― ΡΠΊΠΈΠ½ΡΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ varnishadm vcl.show -v "$VCL_NAME"
Π² ΡΠ°ΠΉΠ», ΡΠ°ΠΊ Ρ ΠΌΠΎΠ³ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ sed ΡΠΊΡΠΈΠΏΡΠ° Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ Ρ
Π»ΠΎΠΏΠΎΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ°ΠΌΠΈ ΡΠ΅ΡΠ²ΠΈΡΠ°.
ΠΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ 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
, ΠΏΡΠΈΡΡΠΌ Π²ΠΎ Π²Ρ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
ΠΈΡ
ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ awk Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅Ρ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ.
# ΡΠ°Π³ ΠΏΠ΅ΡΠ²ΡΠΉ, Π²ΡΠ²Π΅ΡΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΠΈ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ 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 ΡΠΊΡΠΈΠΏΡΠΎΠΌ ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΊΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²Π΅ΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄. ΠΡΠ΅ ΠΌΠΎΠΈ ΡΠ΅ΡΡΡ Π΄Π°Π»ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» βvarnishreloadβ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡΡΡΠΈΠ» systemctl reload varnish
. ΠΠΎΠ³Π°Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ° echo: write error: Broken pipe
Π²Π½ΠΎΠ²Ρ ΡΠΌΠ΅ΡΠ»Π°ΡΡ Π½Π°ΠΌ Π² Π»ΠΈΡΠΎ. ΠΠΎΠ΄ΠΌΠΈΠ³ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΊΡΡΡΠΎΡ ΠΎΠΆΠΈΠ΄Π°Π» Π²Π²ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π² ΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΏΡΡΡΠΎΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°…
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com