Завісанні пры спыненні, калі працуе проксі, рэдка бываюць памылкай VPN, нават калі VPN — апошняе, што відаць на экране. Праграмы за проксі ўсё яшчэ чакаюць шляху, які вось-вось знікне, а юніт, які валодае тунэлем, яшчэ не папрасілі яго закрыць. Тое, што выглядае як павольная служба, звычайна з’яўляецца праблемай парадку. Парадак вырашае больш такіх выпадкаў, чым любое змяненне тайм-аўту.

Працуйце вонкі ў адваротным парадку: спачатку спажыўцы, потым проксі, потым тунель, і кожны спыняе той кампанент, які яго запусціў.

Пералічыце юніты, перш чым нешта спыняць

Запішыце юніт праграмы, юніт проксі і ўладальніка VPN, задзейнічаных у звычайным запуску. Дадайце любы рэзалвер або дапаможнік з уласным разборам, бо менавіта пра іх людзі забываюцца а другой гадзіне ночы. Без гэтага спісу першая каманда спынення, якую вы набярэце, выбірае ахвяру выпадкова.

Імёны — слабы доказ. Карыстальніцкі проксі, сістэмны проксі і тунель іншага ўліковага запісу могуць мець адно імя, цалкам не звязаныя жыццёвыя цыклы.

Скончыце працу, потым спыніце спажыўца

Планавае спыненне пачынаецца з праграмы: дайце ёй скончыць або скасаваць свае запыты, затым спыніце проксі праз яго юніт службы. Калі праграма павінна працягваць працу пасля знікнення тунэля, арганізуйце гэта свядома, а не пакідайце яе прывязанай да маршруту, які вось-вось знікне.

Запыты, якія былі ў шляху падчас спынення, належаць у запіс, бо менавіта адтуль бярэцца шквал паўторных спроб пры наступным запуску.

ExecStop і ExecStopPost — розныя інструменты

ExecStop= — гэта сінхронная аперацыя спынення; ExecStopPost= — гэта ачыстка, якая выконваецца нават пасля няўдалага запуску. Каманда спынення, якая толькі пасылае сігнал працэсу і вяртаецца, дазваляе systemd ісці далей, пакуль спажывец яшчэ скідвае даныя. Усё, што мусіць адбыцца ў любым выпадку, належыць у пост-варыянт, а ўсё, што мусіць блакаваць спыненне, — у сінхронны. Праверце дзейны юніт і яго дадаткі замест таго, каб правіць файл пакета на месцы.

Граф залежнасцей упарадкоўвае задачы спынення. Ён не ператварае асінхронны скрыпт у сінхронны і не прымушае аддаленую праграму зафіксаваць свае даныя.

Абмяжуйце спыненне і ведайце кошт гэтай мяжы

TimeoutStopSec= абмяжоўвае і каманду спынення, і ўласнае завяршэнне службы, а systemd пераходзіць да прымусовага забойства, калі ліміт сканчаецца. Выбірайце значэнне з рэальных паводзін праграмы пры скідванні і запішыце, што можа быць страчана, калі ліміт спрацуе. Лік, выбраны таму што машына павінна выключыцца хутчэй, — гэта настройка страты даных у маскіроўцы.

Калі спыненне ўсё яшчэ павольнае, зафіксуйце юніт, яго даччыныя працэсы, інтэрвал журнала і вынік тайм-аўту. Скарачэнне ўсіх тайм-аўтаў або зварот да шырокага забойства — гэта шлях да таго, каб чыстыя спыненні ператвараліся ў пашкоджаны стан пры наступнай загрузцы.

Адключыцеся праз уладальніка, потым праверце тры выпадкі

Калі спажыўцы спынены, папрасіце менеджар, які валодае тунэлем, адключыцца: экзэмпляр systemd, актыўнае злучэнне NetworkManager або служба пастаўшчыка. Забойства незвязанага працэсу OpenVPN не абавязкова выдаляе сеанс, які даў маршрут, а проксі з палітыкай перазапуску можа аднавіць запыт, пакуль вы разбіраеце шлях. Узгадніце гэтую палітыку з планаваным спыненнем, перш чым пачаць.

Праверце звычайнае спыненне, спыненне з актыўным запытам і спыненне, дзе тунэль адмаўляе першым. Паўтаральная паслядоўнасць з дэдлайнам лепш за хуткае выключэнне, якое спрацоўвае адзін раз.

Падобныя артыкулы