up скрипта се извршава, излази са нулом, а задатак у њој не стиже до приватне услуге која са терминала савршено ради две секунде касније. Инстинкт каже да је реч о времену, а уобичајена поправка је пауза, која скрива трку без разумевања. Корисније читање је да “up” именује куку, а не гаранцију спремности. Активира се када је тунелски уређај конфигурисан, што је пре рута, DNS-а и сигурно пре било које апликације иза тунела.

Тест у љусци је успео јер се извршио након што се све смирило. Кука се извршила у једном одређеном тренутку.

Где се up налази у редоследу покретања

OpenVPN конфигурише тунелски уређај и затим извршава up куку. Инсталација рута је каснија фаза и има сопствену куку, зато задатак зависан од рута смештен у up може видети уређај без корисне стазе. Ставите рад са рутама у route-up и проблем са временом обично нестаје.

Приручник документује тај редослед и окружење које добија свака кука. Тај редослед је цело објашњење класичног извештаја “ради из моје љуске”, а то је и разлог зашто иста скрипта може проћи на једном строју и пасти на другом са споријом фазом рута. Ниједан од резултата не говори ништа о квалитету скрипте.

DNS и спремност апликације долазе још касније. Чак ни инсталиране руте нису доказ да удаљена крајња тачка слуша, да се име разрешава или да постоји десктоп сесија за задатак у корисничком опсегу.

Шта кука заправо наслеђује

Кука се извршава под налогом и окружењем OpenVPN процеса, што није исто што и ваша интерактивна љуска. Може јој недостајати сабирница сесије корисника, десктоп окружење или акредитив који се откључава само при пријави. Запишите шта од тога задатку стварно треба.

То је важно за задатке који изгледају мрежно, али зависе од корисничког контекста: монтирање дељења са корисничким акредитивом, постављање проксија по кориснику или конфигурисање штампача. Привилегована тунелска кука је погрешно место за њих, и никакво чекање не поправља сесију која недостаје.

Када задатак падне у куци, забележите налог, окружење и прву операцију која је пала. То одваја прерано време од проблема са дозволама или контекстом, а њих двоје имају потпуно различите поправке. Нагађање између њих је начин на који поправка од пет минута постаје цело поподне.

Зашто додавање паузе није провера спремности

Пауза одлаже скрипту и помера прозор трке. Брзог дана задатак успе; спорог дана поново падне, а квар је теже репродуковати јер се чини да одлагање ради. Одлагање које ради само под лаким оптерећењем је случајност, а не поправка.

Ако је зависност рута, употребите куку која одговара инсталацији рута. Ако је зависност услуга иза тунела, употребите ограничену проверу која чека тај конкретни услов и јасно пада када никада не дође.

Држите квар експлицитним. Кука која излази са нулом док је њен стварни посао пао гора је од куке која пада, јер управник услуга бележи успех и нико више не гледа. Један ред записа из саме скрипте најјефтинији је начин да то остане поштено.

Чишћење и поновно повезивање заслужују исту пажњу

Скрипта која мења заједничко стање треба одговарајући пут за поништавање. Руте, уноси разрешивача и ознаке заштитног зида које дода кука треба да буду идемпотентне и повратне, иначе ће поновно повезивање насложити другу копију на прву.

Поновна повезивања могу извршавати куке чешће од потпуног покретања услуге. Трајно сучеље које поново успоставља сесију може поново покренути циклус up и route-up, па ће скрипта која претпоставља једно извршавање по подизању система на крају радити погрешно. Пребројте извршавања у запису током дана треперења да видите колико се често заиста покреће. Затим учините скрипту безбедном за толико покретања.

Тестирајте животни циклус који је пао, а не каснију наредбу. Репродукујте подизање система или поновно повезивање, посматрајте како се кука извршава и потврдите да је задатак успео у тренутку када се заиста покреће. Успех из интерактивне љуске после је доказ о зависности, а не доказ да путања покретања ради.

Именујте догађај од којег зависи сваки задатак, а затим вежите задатак за тај догађај. Све остало је одлагање које се претвара да је провера.

Повезани чланци