"Tirohia ki konei," ka kii ia, ka tohu ki tetahi o nga tohu i runga i te mata, "Ka pai ahau ki taku potae whero mena ka tapiritia e matou ki konei nga mea i tukuna atu e ahau ki a koe," ka tohu ki tetahi atu waahanga o te waehere, "kaore te hapa ka whakaatuhia."
He iti nei te pohehe me te ngenge, ka whakarereketia e ahau te whakaaturanga sed kua roa e mahi ana matou, tiakina te konae ka oma systemctl varnish reload
. Kua ngaro te karere hapa...
"Ko nga imeera i whakawhitihia e au me te kaitono," ka haere tonu taku hoa mahi, i te mea ka nui haere tana ataata ki te tino ataata o te koa, "Katahi ka mohio ahau he rite tonu te raru!"
I pehea i timata ai
Ka mau te tuhinga ki te maarama ki te mahi a bash, awk, sed me te systemd. Ko te mohio ki te varnish he pai ake, engari kaore e hiahiatia.
Kua hurihia nga tohu wa i roto i nga snippets.
I tuhia me
Ko tenei tuhinga he whakamaoritanga o te tuhinga taketake i whakaputaina ki te reo Ingarihi e rua wiki ki muri; whakamaoritanga
Ka whiti te ra i roto i nga matapihi maataki i tetahi atu ata mahana o te ngahuru, he kapu inu inu kawhe katahi ano ka taka mai i te papapātuhi, ka oro mai te oro tino pai ki o taringa, ka toremi i te ngaru o nga papapātuhi miihini, me te urunga tuatahi. i roto i te rarangi o nga tikiti backlog i runga i te papa o Kanban e whiti ana ki te taitara tino nui "Tirotirohia te varnishreload" sh: echo: I/O hapa i roto i te whakaari "(Tirotiro "varnishreload sh: echo: I/O hapa" i roto i te whakaari). Ina tae mai ki te varnish, kei reira kaore e taea te waahi mo nga hapa, ahakoa kaore e puta he raru penei i tenei keehi.
Mo te hunga kaore i te mohio
E ai ki te taitara o te tiiti, i puta te hapa i runga i tetahi o nga kaitoro i runga i te atamira, a, i te mea i tino mohio ahau kei te pai te mahi o te arai parani i runga i te atamira, i mahara ahau he hapa iti tenei. Na, he karere noa i mutu i roto i te awa putanga kua kati. Ka tango ahau i te tiiti maku, i runga i te tino maia ka tohu ahau kua reri i roto i te iti iho i te 30 meneti, ka patipati i toku tuara mo te whakakore i te poari i tetahi atu para ka hoki ki nga kaupapa nui ake.
Ka pakaru ki te pakitara i te 200 km/h
Te whakatuwhera i te kōnae varnishreload
, i runga i tetahi o nga tūmau e whakahaere ana i a Debian Stretch, i kite ahau i tetahi tuhinga anga iti iho i te 200 rarangi te roa.
I te haere ki roto i te tuhinga, kaore au i kite i tetahi mea ka puta he raru ka rere tika mai i te tauranga.
Ina hoki, he atamira tenei, ahakoa ka pakaru, karekau he tangata e amuamu, kaare... karekau rawa. Ka whakahaerehia e ahau te tuhinga ka kite i nga mea ka tuhia ki te tauranga, engari kua kore e kitea nga hapa.
He tokorua ano ka oma ki te whakarite kia kore e taea e au te whakaputa i te hapa me te kore e whakapau kaha, a ka timata ahau ki te whakaaro me pehea te whakarereke i tenei tuhinga me te tuku i te hapa.
Ka taea e te tuhinga te whakakore i te STDOUT (ma te whakamahi > &-
)? STDERR ranei? Kaore tetahi o enei i mahi i te mutunga.
Te ahua nei ka whakarerekehia e te systemd te taiao whakaoho, engari me pehea, me te aha?
Ka whakatuwherahia e ahau te vim me te whakatika varnishreload
, taapiri set -x
kei raro tonu i te shebang, me te tumanako ka whakamarama te putanga patuiro o te tuhinga.
Kua whakatikahia te konae, no reira ka utaina ano e ahau te varnish ka kite kua pakaru nga mea katoa i te huringa ... Ko te ngongo he tino raru, he maha nga tohu C-rite. Ahakoa ko te panuku i roto i te tauranga kaore e ranea ki te kimi i hea ka tiimata. Kei te tino raruraru ahau. Ka taea e te aratau patuiro te pa ki te mahi o nga papatono kua whakarewahia ki te tuhinga? Kao, he koretake. Bug i roto i te anga? He maha nga ahuatanga e rere ana i roto i toku mahunga ano he moka i nga huarahi rereke. Ko te kapu o te inu kawheina ka pau tonu, he haerenga tere ki te kihini ki te whakaki i nga rakau ka... ka haere. Ka whakatuwherahia e ahau te tuhinga me te ata titiro ki te shebang: #!/bin/sh
.
/bin/sh
- he hononga hono noa tenei ki te bash, no reira ka whakamaoritia te tuhinga ki te aratau POSIX-hototahi, tika? Kare ra! Ko te anga taunoa i runga i a Debian he puihi, a koira tonu te ahua. /bin/sh
.
# ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jan 24 2017 /bin/sh -> dash
Hei whakamatautau, i hurihia e ahau te shebang ki #!/bin/bash
, kua mukua set -x
ka whakamatau ano. I te mutunga, i muri mai i te whakaara ano o te parani, ka puta he hapa i te putanga:
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
Raina 124, anei!
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 }
Engari i te mea ka puta, ko te rarangi 124 he tino kau, kaore he painga. Ka taea noa e au te whakaaro i puta te hapa hei waahanga o te aho raina maha ka timata i te rarangi 116.
He aha te mea ka tuhia ki te taurangi? VCL_FILE
na te mahi i te anga-roto i runga ake nei?
I te timatanga, ka tukuna e ia nga ihirangi o te taurangi VLC_SHOW
, i hangaia i runga i te rarangi 115, e whai ana i te whakahau ma te paipa. Na ka aha i reira?
Tuatahi, ka whakamahia ki reira varnishadm
, he wahanga o te kete whakaurunga parani, mo te whakatu parani me te kore e timata ano.
Kapa-iti vcl.show -v
whakamahia ki te whakaputa i te whirihoranga VCL katoa kua tohua ki roto ${VCL_NAME}
, ki STDOUT.
Hei whakaatu i te whirihoranga VCL hohe o naianei, me te maha o nga putanga o mua o nga whirihoranga ararere parani kei te maumahara tonu, ka taea e koe te whakamahi i te whakahau varnishadm vcl.list
, ka rite te putanga ki tera i raro nei:
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
Uara taurangi ${VCL_NAME}
kua whakauruhia ki tetahi atu waahanga o te tuhinga varnishreload
ki te ingoa o te VCL e hohe ana i tenei wa, mena he kotahi. I tenei keehi ka "reload_20190101_120000_12397".
Nui, taurangi ${VCL_SHOW}
kei roto i te whirihoranga katoa mo te parani, maamaa mo naianei. Inaianei kua mohio ahau he aha te putanga taarua set -x
i tino pakaru - kei roto nga ihirangi o te whirihoranga kua puta.
He mea nui kia mohio koe ka taea te whakakotahi i te whirihoranga VCL katoa mai i nga konae maha. Ka whakamahia nga korero ahua-C ki te tautuhi i te waahi kua whakauruhia etahi konae whirihoranga ki etahi atu, a koinei te mea e whai ake nei o te rarangi tohu waehere.
Ko te wetereo mo nga korero e whakaahua ana i nga konae whakauru kei te ahua e whai ake nei:
// VCL.SHOW <NUM> <NUM> <FILENAME>
Ko nga nama kaore he mea nui i roto i tenei horopaki, kei te pirangi matou ki te ingoa konae.
He aha te mutunga mai i te repo o nga whakahau ka timata i te rarangi 116?
Kia ata whakaarohia.
E wha nga wahanga o te roopu:
- Maamaa
echo
, ka tā i te uara o te taurangi${VCL_SHOW}
echo "$VCL_SHOW"
awk
, e rapu ana mo te rarangi (rekoata) ko te mara tuatahi, i muri i te pakaru o te tuhinga, ko “//”, ko te tuarua ko “VCL.SHOW”.
Ka tuhia e Awk te rarangi tuatahi e rite ana ki enei tauira ka mutu tonu te mahi.awk '$1 == "//" && $2 == "VCL.SHOW" {print; exit}'
- He poraka waehere e pupuri ana i nga uara mara ki nga taurangi e rima, ka wehea e nga waahi. Ko te taurangi FILE tuarima ka whiwhi i te toenga o te raina. Ka mutu, ka tuhia e te paoro whakamutunga nga ihirangi o te taurangi
${FILE}
.{ read -r DELIM VCL_SHOW INDEX SIZE FILE; echo "$FILE" }
- I te mea ko nga kaupae 1 ki te 3 kei roto i te anga-roto, e whakaputa ana i te uara
$FILE
ka tuhia ki te taurangiVCL_FILE
.
E ai ki nga korero mo te rarangi 119, ko tenei anake te kaupapa o te whakahaere pono i nga keehi ka tohutoro a VCL i nga konae me nga waahi ki o raatau ingoa.
Kua korero ahau i te arorau tukatuka taketake mo ${VCL_FILE}
ka ngana ki te huri i te raupapa whakahau, engari kaore i puta ki tetahi mea. I pai nga mea katoa ki ahau, engari i taku tiimata i te ratonga ka puta he hapa.
Ko te ahua karekau e taea te whakaputa i te hapa i te wa e whakahaere a ringa ana i te tuhinga, i te mea kua pau nga meneti 30 e ono nga wa, a, hei taapiri, kua puta ake he mahi matua nui ake, ka peia etahi atu take ki te taha. I whakakiia te toenga o te wiki ki nga momo mahi, a, he paku waimeha noa e te ripoata mo te sed me te uiuinga me tetahi kaitono. He raru kei roto varnishreload
kua ngaro noa atu i te onepu o te wa.
Ko to mea e kiia nei he sed-fu... he tino... para
I te wiki i muri mai he ra tino kore noa ahau, no reira ka whakatau ahau ki te tarai ano i tenei tikiti. I tumanako ahau i roto i taku roro, i rapua e etahi mahi papamuri he otinga mo tenei raru i enei wa katoa, a i tenei wa ka tino marama ahau ki nga mea kei te haere.
I te mea ko te whakarereke noa i te waehere kaore i awhina i tera wa, ka whakatau ahau ki te tuhi ano mai i te rarangi 116. Ahakoa he aha, he poauau te waehere o naianei. A kaore rawa he take ki te whakamahi read
.
Ka titiro ano ki te hapa:
sh: echo: broken pipe
— E rua nga waahi ka puta te paoro i roto i tenei whakahau, engari ki taku whakaaro ko te mea tuatahi ko te tangata hara (he hoa mahi ranei). Kare hoki a Awk e whakahihiri i te maia. A ki te mea he pono awk | {read; echo}
ko te hoahoa ka arahi ki enei raru katoa, he aha e kore ai e whakakapi? Karekau tenei whakahau raina-kotahi e whakamahi i nga ahuatanga katoa o te awk, tae atu ki tenei taapiri read
i tua atu.
Mai i tera wiki i puta he ripoata mo sed
, I pirangi ahau ki te whakamatau i aku pukenga hou kua riro mai me te ngawari echo | awk | { read; echo}
ki te maarama ake echo | sed
. Ahakoa ehara tenei i te huarahi pai ki te tautuhi i te pepeha, i whakaaro ahau me whakamatau taku sed-fu me te ako i tetahi mea hou mo te raru. I te ara, i tono ahau ki taku hoa mahi, te kaituhi o te korero sed, ki te awhina i ahau ki te whakaputa i tetahi tuhinga sed pai ake.
I tukuna e ahau nga ihirangi varnishadm vcl.show -v "$VCL_NAME"
ki tetahi konae, na reira ka taea e au te aro ki te tuhi i te tuhinga sed me te kore he raru o te whakaara ano i nga ratonga.
He whakaahuatanga poto mo te pehea e kitea ai te whakaurunga o nga tukanga sed n
kua tohua hei whakawehe raina.
I roto i te maha o nga paahitanga me nga tohutohu a taku hoa mahi, i tuhia e matou he tuhinga tuhi he rite nga hua ki te rarangi tuatahi katoa 116.
Kei raro nei he tauira konae me nga raraunga whakauru:
> 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
Kaore pea tenei e tino kitea mai i te whakaahuatanga i runga ake nei, engari ko te korero tuatahi anake ta matou e aro atu // VCL.SHOW
, he maha pea kei roto i nga raraunga whakauru. Koinei te take ka mutu te awk taketake i muri i te tukinga tuatahi.
# шаг первый, вывести только строки с комментариями
# используя возможности 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
Na, ko nga korero o te tuhinga varnishreload ka penei te ahua:
VCL_FILE="$(echo "$VCL_SHOW" | sed -En '#// VCL.SHOW#{s#.*[0-9]+ [0-9]+ (.*)$#1#p;q;};')"
Ko te arorau o runga ake nei ka taea te whakaatu poto penei:
Mēnā e ōrite ana te aho ki tētahi kīanga auau // VCL.SHOW
, ka pau nga kupu e mau ana i nga tau e rua i tenei rarangi, ka tiakina nga mea katoa e toe ana i muri i tenei mahi. Tukuna te uara kua penapena ka mutu te hotaka.
He ngawari, ehara?
I koa matou ki te tuhinga sed me te mea i whakakapihia e ia nga waehere taketake katoa. Ko aku whakamatautau katoa i puta nga hua e hiahiatia ana, no reira i hurihia e ahau te "varnishreload" i runga i te tūmau ka oma ano. systemctl reload varnish
. Hapa kino echo: write error: Broken pipe
ka kata ano ki o matou kanohi. Kei te tatari te pehu whakamohio ki te whakauru i tetahi whakahau hou i roto i te pouri pouri o te tauranga...
Source: will.com