"์ฌ๊ธฐ๋ฅผ ๋ณด์ธ์." ๊ทธ๊ฐ ํ๋ฉด์ ๊ธฐํธ ์ค ํ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ ๋งํฉ๋๋ค.
์กฐ๊ธ ์์ํ๊ณ ํผ๊ณคํด์ ๊ทธ๋์ ์์
ํ๋ sed ๋ฌธ์ ๋ณ๊ฒฝํ๊ณ ํ์ผ์ ์ ์ฅํ๊ณ ์คํํฉ๋๋ค. systemctl varnish reload
. ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฌ๋ผ์ก์ต๋๋ค...
"๋ด๊ฐ ํ๋ณด์์ ์ฃผ๊ณ ๋ฐ์ ์ด๋ฉ์ผ" ๋ด ๋๋ฃ๋ ๊ทธ์ ๋ฏธ์๊ฐ ๊ธฐ์จ์ผ๋ก ๊ฐ๋ ์ฐฌ ์ง์ ํ ๋ฏธ์๋ก ๋ฐ๋๋ฉด์ ๊ณ์ ๋งํ์ต๋๋ค. "๊ฐ์๊ธฐ ์ด๊ฒ์ด ์ ํํ ๊ฐ์ ๋ฌธ์ ๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค!"
๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์์ ๋์์ต๋๊น?
์ด ๊ธฐ์ฌ๋ bash, awk, sed ๋ฐ systemd ์๋ ๋ฐฉ์์ ์ดํดํ๊ณ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋ฐ๋์์ ๋ํ ์ง์์ด ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ํ์๋ ์๋๋๋ค.
์ค๋ํซ์ ํ์์คํฌํ๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค.
๋ก ์์ฑ
์ด ํ
์คํธ๋ XNUMX์ฃผ ์ ์ ์์ด๋ก ์ถํ๋ ์๋ณธ์ ๋ฒ์ญํ ๊ฒ์
๋๋ค. ๋ฒ์ญ
๋ ๋ค๋ฅธ ๋ฐ๋ปํ ๊ฐ์ ์์นจ์ ํ ํธ์ธ ์ฐฝ๋ฌธ์ ํตํด ํ์ด์ด ๋น์น๊ณ , ๊ฐ ๋ด๋ฆฐ ์นดํ์ธ ์๋ฃ ํ ์์ด ํค๋ณด๋์์ ๋จ์ด์ ธ ์๊ณ , ์ข์ํ๋ ๊ตํฅ๊ณก์ด ํค๋ํฐ์ ์๋ ๊ธฐ๊ณ์ ํค๋ณด๋์ ๋ฐ์ค๋ฝ๊ฑฐ๋ฆฌ๋ ์๋ฆฌ ์๋ก ์ฐ์ฃผ๋๊ณ , ์นธ๋ฐ ๋ณด๋์ ๋ฐฑ๋ก๊ทธ ํฐ์ผ ๋ชฉ๋ก์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ด "Investigate varnishreload sh: echo: I/O error in stage"๋ผ๋ ์ด๋ช ์ ์ธ ์ ๋ชฉ๊ณผ ํจ๊ป ์ฅ๋์ค๋ฝ๊ฒ ๋น๋ฉ๋๋ค(์คํ ์ด์ง์์ "varnishreload sh: echo: I/O ์ค๋ฅ ์กฐ์ฌ"). ๋ฐ๋์ฌ์ ๊ดํด์๋ ์ด ๊ฒฝ์ฐ์ฒ๋ผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ผ๋ ์ค์๊ฐ ์์ผ๋ฉฐ ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค.
์ต์ํ์ง ์์ ๋ถ๋ค์ ์ํด
ํฐ์ผ์ ์ ๋ชฉ์์ ์ ์ ์๋ฏ์ด ์คํ ์ด์ง์ ์๋ ์๋ฒ ์ค ํ๋์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ ์คํ ์ด์ง์์ ๋ฐ๋์ฌ์ ๋ผ์ฐํ ์ด ์ ๋๋ก ์๋ํ๊ณ ์๋ค๊ณ ํ์ ํ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ฌ์ํ ์ค์์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ ๋ซํ ์ถ๋ ฅ ์คํธ๋ฆผ์ ๋ค์ด๊ฐ ๋ฉ์์ง์ผ ๋ฟ์ ๋๋ค. ๋๋ 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ํ์์ ์์ํ๋ ๋ช
๋ น์ ๋ช์์๋ ์ด๋ค ์ผ์ด ๋ฒ์ด์ง๊น์?
์์ ๋ด์.
๋ช
๋ น์ ๋ค์ ๋ค ๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๋จ์ํ
echo
, ๋ณ์์ ๊ฐ์ ํ์ํฉ๋๋ค.${VCL_SHOW}
echo "$VCL_SHOW"
awk
, ํ(๋ ์ฝ๋)์ ์ฐพ์ต๋๋ค. ์ฌ๊ธฐ์ ํ ์คํธ ๋ถํ ํ ์ฒซ ๋ฒ์งธ ํ๋๋ "//"์ด๊ณ ๋ ๋ฒ์งธ ํ๋๋ "VCL.SHOW"์ ๋๋ค.
Awk๋ ์ด๋ฌํ ํจํด๊ณผ ์ผ์นํ๋ ์ฒซ ๋ฒ์งธ ์ค์ ์์ฑํ ๋ค์ ์ฆ์ ์ฒ๋ฆฌ๋ฅผ ์ค์งํฉ๋๋ค.awk '$1 == "//" && $2 == "VCL.SHOW" {print; exit}'
- ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ XNUMX๊ฐ์ ๋ณ์์ ํ๋ ๊ฐ์ ์ ์ฅํ๋ ์ฝ๋ ๋ธ๋ก์
๋๋ค. ๋ค์ฏ ๋ฒ์งธ ๋ณ์ FILE์ ์ค์ ๋๋จธ์ง ๋ถ๋ถ์ ๋ฐ์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ๋ง์ง๋ง ์์ฝ๋ ๋ณ์์ ๋ด์ฉ์ ์๋๋ค.
${FILE}
.{ read -r DELIM VCL_SHOW INDEX SIZE FILE; echo "$FILE" }
- 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๊ฐ ์
๋ ฅ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋ตํ ์ค๋ช
์ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค. 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