Falling Down the Rabbit Hole: ํ•˜๋‚˜์˜ ๋ฐ”๋‹ˆ์‹œ ์žฌ๋ถ€ํŒ… ์˜ค๋ฅ˜ ์ด์•ผ๊ธฐ - 1๋ถ€

๊ณ ์Šคํ‹ฐ๋ˆ„์ƒจ์นด, ๋งˆ์น˜ ๊ทธ์˜ ๋ชฉ์ˆจ์ด ๋‹ฌ๋ ค์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ง€๋‚œ 20 ๋ถ„ ๋™์•ˆ ๋ฒ„ํŠผ์„ ๋‘๋“œ๋ฆฐ ํ›„ ๊ทธ์˜ ๋ˆˆ์— ๋ฐ˜ ๊ฑฐ์นœ ํ‘œ์ •๊ณผ ๊ตํ™œํ•œ ๋ฏธ์†Œ๋ฅผ ์ง€์œผ๋ฉฐ "Dude, ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”."

"์—ฌ๊ธฐ๋ฅผ ๋ณด์„ธ์š”." ๊ทธ๊ฐ€ ํ™”๋ฉด์˜ ๊ธฐํ˜ธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋งํ•ฉ๋‹ˆ๋‹ค.

์กฐ๊ธˆ ์˜์•„ํ•˜๊ณ  ํ”ผ๊ณคํ•ด์„œ ๊ทธ๋™์•ˆ ์ž‘์—…ํ–ˆ๋˜ sed ๋ฌธ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. systemctl varnish reload. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค...

"๋‚ด๊ฐ€ ํ›„๋ณด์ž์™€ ์ฃผ๊ณ ๋ฐ›์€ ์ด๋ฉ”์ผ" ๋‚ด ๋™๋ฃŒ๋Š” ๊ทธ์˜ ๋ฏธ์†Œ๊ฐ€ ๊ธฐ์จ์œผ๋กœ ๊ฐ€๋“ ์ฐฌ ์ง„์ •ํ•œ ๋ฏธ์†Œ๋กœ ๋ฐ”๋€Œ๋ฉด์„œ ๊ณ„์† ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. "๊ฐ‘์ž๊ธฐ ์ด๊ฒƒ์ด ์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค!"

๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ธฐ์‚ฌ๋Š” bash, awk, sed ๋ฐ systemd ์ž‘๋™ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋‹ˆ์‹œ์— ๋Œ€ํ•œ ์ง€์‹์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
์Šค๋‹ˆํŽซ์˜ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋กœ ์ž‘์„ฑ ๊ณ ์Šคํ‹ฐ๋ˆ„์ƒจ์นด.
์ด ํ…์ŠคํŠธ๋Š” XNUMX์ฃผ ์ „์— ์˜์–ด๋กœ ์ถœํŒ๋œ ์›๋ณธ์„ ๋ฒˆ์—ญํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒˆ์—ญ ๋ณด์ด์ฝ”๋ด.

๋˜ ๋‹ค๋ฅธ ๋”ฐ๋œปํ•œ ๊ฐ€์„ ์•„์นจ์— ํƒ ํŠธ์ธ ์ฐฝ๋ฌธ์„ ํ†ตํ•ด ํ–‡์‚ด์ด ๋น„์น˜๊ณ , ๊ฐ“ ๋‚ด๋ฆฐ ์นดํŽ˜์ธ ์Œ๋ฃŒ ํ•œ ์ž”์ด ํ‚ค๋ณด๋“œ์—์„œ ๋–จ์–ด์ ธ ์žˆ๊ณ , ์ข‹์•„ํ•˜๋Š” ๊ตํ–ฅ๊ณก์ด ํ—ค๋“œํฐ์— ์žˆ๋Š” ๊ธฐ๊ณ„์‹ ํ‚ค๋ณด๋“œ์˜ ๋ฐ”์Šค๋ฝ๊ฑฐ๋ฆฌ๋Š” ์†Œ๋ฆฌ ์œ„๋กœ ์—ฐ์ฃผ๋˜๊ณ , ์นธ๋ฐ˜ ๋ณด๋“œ์˜ ๋ฐฑ๋กœ๊ทธ ํ‹ฐ์ผ“ ๋ชฉ๋ก์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์ด "Investigate varnishreload sh: echo: I/O error in stage"๋ผ๋Š” ์šด๋ช…์ ์ธ ์ œ๋ชฉ๊ณผ ํ•จ๊ป˜ ์žฅ๋‚œ์Šค๋Ÿฝ๊ฒŒ ๋น›๋‚ฉ๋‹ˆ๋‹ค(์Šคํ…Œ์ด์ง€์—์„œ "varnishreload sh: echo: I/O ์˜ค๋ฅ˜ ์กฐ์‚ฌ"). ๋ฐ”๋‹ˆ์‰ฌ์— ๊ด€ํ•ด์„œ๋Š” ์ด ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋”๋ผ๋„ ์‹ค์ˆ˜๊ฐ€ ์—†์œผ๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ถ„๋“ค์„ ์œ„ํ•ด ๋ฐ”๋‹ˆ์‹œ ์žฌ์žฅ์ „, ์ด๊ฒƒ์€ ๊ตฌ์„ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ„๋‹จํ•œ ์…ธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ๊ด‘ํƒ -VCL์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

ํ‹ฐ์ผ“์˜ ์ œ๋ชฉ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์Šคํ…Œ์ด์ง€์— ์žˆ๋Š” ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉฐ ์Šคํ…Œ์ด์ง€์—์„œ ๋ฐ”๋‹ˆ์‰ฌ์˜ ๋ผ์šฐํŒ…์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์‚ฌ์†Œํ•œ ์‹ค์ˆ˜์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฏธ ๋‹ซํžŒ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋“ค์–ด๊ฐ„ ๋ฉ”์‹œ์ง€์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” 30๋ถ„๋„ ์•ˆ ๋˜์–ด ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ , ๋ณด๋“œ์—์„œ ๋‹ค์Œ ์ •ํฌ๋ฅผ ์น˜์šฐ๊ณ  ๋” ์ค‘์š”ํ•œ ์ผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์–ด๊นจ๋ฅผ ๋‘๋“œ๋ฆฌ๋ฉฐ ์ž์‹  ์žˆ๊ฒŒ ํ‹ฐ์ผ“์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์‹œ์† 200km๋กœ ๋ฒฝ์— ์ถฉ๋Œ

ํŒŒ์ผ ์—ด๊ธฐ varnishreload, Debian Stretch๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜์—์„œ 200์ค„ ๋ฏธ๋งŒ์˜ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ„ฐ๋ฏธ๋„์—์„œ ์ง์ ‘ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ ์ด๊ฒƒ์€ ๋ฌด๋Œ€์ž…๋‹ˆ๋‹ค. ๊นจ์ง€๋”๋ผ๋„ ์•„๋ฌด๋„ ๋ถˆํ‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ„ฐ๋ฏธ๋„์— ๋ฌด์—‡์ด ๊ธฐ๋ก๋˜๋Š”์ง€ ํ™•์ธํ•˜์ง€๋งŒ ์˜ค๋ฅ˜๋Š” ๋” ์ด์ƒ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ๋…ธ๋ ฅ ์—†์ด ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋„๋ก ๋ช‡ ๋ฒˆ ๋” ์‹คํ–‰ํ•˜๊ณ  ์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๊ฐ€ STDOUT์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์‚ฌ์šฉ > &-)? ์•„๋‹ˆ๋ฉด STDERR? ๊ฒฐ๊ตญ ๋‘˜ ๋‹ค ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ systemd๋Š” ์–ด๋–ค ์‹์œผ๋กœ๋“  ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ณ€๊ฒฝํ•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ, ์™œ?
๋‚˜๋Š” vim์„ ์ผœ๊ณ  ํŽธ์ง‘ varnishreload, ์ถ”๊ฐ€ set -x shebang ๋ฐ”๋กœ ์•„๋ž˜์—์„œ ์Šคํฌ๋ฆฝํŠธ ์ถœ๋ ฅ์„ ๋””๋ฒ„๊น…ํ•˜๋ฉด ์•ฝ๊ฐ„์˜ ๋น›์ด ๋น„์ถฐ์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํŒŒ์ผ์ด ์ˆ˜์ •๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฐ”๋‹ˆ์‹œ๋ฅผ ๋‹ค์‹œ๋กœ๋“œํ•˜๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ชจ๋“  ๊ฒƒ์„ ์™„์ „ํžˆ ๊นจ๋œจ๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค ... ๋ฐฐ๊ธฐ ์žฅ์น˜๋Š” ์ˆ˜๋งŽ์€ C์™€ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ ๋œ ์™„์ „ํ•œ ์—‰๋ง์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ์Šคํฌ๋กคํ•ด๋„ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™„์ „ํžˆ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ. ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์—…์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ, ํ—›์†Œ๋ฆฌ. ์‰˜์˜ ๋ฒ„๊ทธ? ๋ช‡ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ”ํ€ด๋ฒŒ๋ ˆ์ฒ˜๋Ÿผ ๋‚ด ๋จธ๋ฆฟ์†์„ ๋‚ ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์นดํŽ˜์ธ์ด ๊ฐ€๋“ํ•œ ์Œ๋ฃŒ์ˆ˜ ํ•œ ์ž”์€ ์ฆ‰์‹œ ๋น„์›Œ์ง€๊ณ , ์žฌ๊ณต๊ธ‰์„ ์œ„ํ•ด ๋ถ€์—Œ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•˜๊ณ โ€ฆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ด๊ณ  shebang์„ ์ž์„ธํžˆ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. #!/bin/sh.

/bin/sh - ์ด๊ฒƒ์€ ๋‹จ์ง€ bash ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ฏ€๋กœ ์Šคํฌ๋ฆฝํŠธ๋Š” 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์œผ๋กœ.

ํ˜„์žฌ ํ™œ์„ฑ VCL ๊ตฌ์„ฑ๊ณผ ์•„์ง ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ด์ „ ๋ฒ„์ „์˜ ๋ฐ”๋‹ˆ์‹œ ๋ผ์šฐํŒ… ๊ตฌ์„ฑ์„ ํ‘œ์‹œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 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 ๊ตฌ์„ฑ์ด ์ข…์ข… ์—ฌ๋Ÿฌ ํŒŒ์ผ์—์„œ ํ•จ๊ป˜ ๋ญ‰์ณ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. C ์Šคํƒ€์ผ ์ฃผ์„์€ ํ•˜๋‚˜์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์ด ๋‹ค๋ฅธ ๊ตฌ์„ฑ ํŒŒ์ผ์— ํฌํ•จ๋œ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋‹ค์Œ ์ฝ”๋“œ ์Šค๋‹ˆํŽซ ๋ผ์ธ์˜ ์ „๋ถ€์ž…๋‹ˆ๋‹ค.
ํฌํ•จ๋œ ํŒŒ์ผ์„ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„ ๊ตฌ๋ฌธ์˜ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// 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. ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ XNUMX๊ฐœ์˜ ๋ณ€์ˆ˜์— ํ•„๋“œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค. ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ณ€์ˆ˜ FILE์€ ์ค„์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ๋งˆ์ง€๋ง‰ ์—์ฝ”๋Š” ๋ณ€์ˆ˜์˜ ๋‚ด์šฉ์„ ์”๋‹ˆ๋‹ค. ${FILE}.
    { read -r DELIM VCL_SHOW INDEX SIZE FILE; echo "$FILE" }
  4. 1~3๋‹จ๊ณ„๊ฐ€ ๋ชจ๋‘ ์„œ๋ธŒ์‰˜๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์˜ ์ถœ๋ ฅ์€ $FILE ๋ณ€์ˆ˜์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค VCL_FILE.

119ํ–‰์˜ ์ฃผ์„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด๊ฒƒ์€ VCL์ด ์ด๋ฆ„์— ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์œ ์ผํ•œ ๋ชฉ์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์— ๋Œ€ํ•œ ์›๋ž˜ ์ฒ˜๋ฆฌ ๋…ผ๋ฆฌ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ${VCL_FILE} ๋ช…๋ น ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์•„๋ฌด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ๊น”๋”ํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์œผ๋ฉฐ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‹จ์ˆœํžˆ ์žฌํ˜„๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ 30 ๋ถ„์€ ์ด๋ฏธ XNUMX ๋ฒˆ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ ๋” ๋†’์€ ์šฐ์„  ์ˆœ์œ„ ์ž‘์—…์ด ๋‚˜ํƒ€๋‚˜ ๋‚˜๋จธ์ง€ ์‚ฌ๋ก€๋ฅผ ์ œ์ณ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ฃผ์ผ์˜ ๋‚˜๋จธ์ง€ ์‹œ๊ฐ„์€ ๋‹ค์–‘ํ•œ ์ž‘์—…์œผ๋กœ ์ฑ„์›Œ์กŒ๊ณ  sed์— ๋Œ€ํ•œ ๋Œ€ํ™”์™€ ํ›„๋ณด์ž์™€์˜ ์ธํ„ฐ๋ทฐ๋กœ ์•ฝ๊ฐ„ ํฌ์„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ๋ฌธ์ œ varnishreload ๋Œ์ดํ‚ฌ ์ˆ˜ ์—†๋Š” ์‹œ๊ฐ„์˜ ๋ชจ๋ž˜ ์†์—์„œ ๊ธธ์„ ์žƒ์—ˆ๋‹ค.

๋‹น์‹ ์˜ ์†Œ์œ„ sed-fu... ์‹ค์ œ๋กœ๋Š”... ์“ฐ๋ ˆ๊ธฐ

๊ทธ ๋‹ค์Œ ์ฃผ์—๋Š” ์ƒ๋‹นํžˆ ํ•œ๊ฐ€ํ•œ ๋‚ ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ‹ฐ์ผ“์„ ๋‹ค์‹œ ๋ฐ›๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ๋‘๋‡Œ์—์„œ ์–ด๋–ค ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ญ์ƒ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ณ  ์žˆ์—ˆ๊ณ  ์ด๋ฒˆ์—๋Š” ๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ ๋ฒˆ์— ์ฝ”๋“œ๋งŒ ๋ฐ”๊ฟ”๋„ ์†Œ์šฉ์ด ์—†์—ˆ๊ธฐ์— ๊ทธ๋ƒฅ 116๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์–ด๋ฆฌ์„์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค read.

์˜ค๋ฅ˜๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
sh: echo: broken pipe - ์ด ๋ช…๋ น์—์„œ echo๋Š” ๋‘ ์œ„์น˜์— ์žˆ์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ๊ฐ€ ๋ฒ”์ธ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๊ธ€์Ž„, ๋˜๋Š” ์ ์–ด๋„ ๊ณต๋ฒ”์ž). Awk๋„ ์ž์‹ ๊ฐ์„ ๋ถˆ๋Ÿฌ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ์— ์ •๋ง awk | {read; echo} ๋””์ž์ธ์€ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๊ต์ฒดํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ํ•œ ์ค„ ๋ช…๋ น์€ awk์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. read ๋ถ€์†๋ฌผ์—.

์ง€๋‚œ ์ฃผ๋ถ€ํ„ฐ ๊ด€๋ จ ๋ณด๊ณ ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. sed์ƒˆ๋กœ ์Šต๋“ํ•œ ๊ธฐ์ˆ ์„ ์‹œ๋„ํ•˜๊ณ  ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. echo | awk | { read; echo} ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ echo | sed. ์ด๊ฒƒ์ด ๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ์ ์–ด๋„ sed-fu๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋™๋ฃŒ์ธ sed talk ์ž‘๊ฐ€์—๊ฒŒ ๋ณด๋‹ค ํšจ์œจ์ ์ธ sed ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์„ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์šฉ์„ ๋ฒ„๋ ธ์–ด์š” varnishadm vcl.show -v "$VCL_NAME" ์„œ๋น„์Šค๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด sed ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sed๊ฐ€ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์€ ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์˜ GNU ๋งค๋‰ด์–ผ. sed ์†Œ์Šค์—์„œ ๊ธฐํ˜ธ n ์ค„ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

๋ช‡ ๋ฒˆ์— ๊ฑธ์ณ ๋™๋ฃŒ์˜ ์กฐ์–ธ์„ ๋ฐ›์•„ ์›๋ณธ 116ํ–‰ ์ „์ฒด์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” sed ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ƒ˜ํ”Œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

> 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€