Парадак спынення службаў VPN і проксі ў Linux
Спыніце спажыўца, пакуль шлях яшчэ існуе, потым проксі, потым тунель праз яго ўладальніка. Выкарыстоўвайце ExecStop і TimeoutStopSec свядома, а не шырокае забойства.
Завісанні пры спыненні, калі працуе проксі, рэдка бываюць памылкай VPN, нават калі VPN — апошняе, што відаць на экране. Праграмы за проксі ўсё яшчэ чакаюць шляху, які вось-вось знікне, а юніт, які валодае тунэлем, яшчэ не папрасілі яго закрыць. Тое, што выглядае як павольная служба, звычайна з’яўляецца праблемай парадку. Парадак вырашае больш такіх выпадкаў, чым любое змяненне тайм-аўту.
Працуйце вонкі ў адваротным парадку: спачатку спажыўцы, потым проксі, потым тунель, і кожны спыняе той кампанент, які яго запусціў.
Пералічыце юніты, перш чым нешта спыняць
Запішыце юніт праграмы, юніт проксі і ўладальніка VPN, задзейнічаных у звычайным запуску. Дадайце любы рэзалвер або дапаможнік з уласным разборам, бо менавіта пра іх людзі забываюцца а другой гадзіне ночы. Без гэтага спісу першая каманда спынення, якую вы набярэце, выбірае ахвяру выпадкова.
Імёны — слабы доказ. Карыстальніцкі проксі, сістэмны проксі і тунель іншага ўліковага запісу могуць мець адно імя, цалкам не звязаныя жыццёвыя цыклы.
Скончыце працу, потым спыніце спажыўца
Планавае спыненне пачынаецца з праграмы: дайце ёй скончыць або скасаваць свае запыты, затым спыніце проксі праз яго юніт службы. Калі праграма павінна працягваць працу пасля знікнення тунэля, арганізуйце гэта свядома, а не пакідайце яе прывязанай да маршруту, які вось-вось знікне.
Запыты, якія былі ў шляху падчас спынення, належаць у запіс, бо менавіта адтуль бярэцца шквал паўторных спроб пры наступным запуску.
ExecStop і ExecStopPost — розныя інструменты
ExecStop= — гэта сінхронная аперацыя спынення; ExecStopPost= — гэта ачыстка, якая выконваецца нават пасля няўдалага запуску. Каманда спынення, якая толькі пасылае сігнал працэсу і вяртаецца, дазваляе systemd ісці далей, пакуль спажывец яшчэ скідвае даныя. Усё, што мусіць адбыцца ў любым выпадку, належыць у пост-варыянт, а ўсё, што мусіць блакаваць спыненне, — у сінхронны. Праверце дзейны юніт і яго дадаткі замест таго, каб правіць файл пакета на месцы.
Граф залежнасцей упарадкоўвае задачы спынення. Ён не ператварае асінхронны скрыпт у сінхронны і не прымушае аддаленую праграму зафіксаваць свае даныя.
Абмяжуйце спыненне і ведайце кошт гэтай мяжы
TimeoutStopSec= абмяжоўвае і каманду спынення, і ўласнае завяршэнне службы, а systemd пераходзіць да прымусовага забойства, калі ліміт сканчаецца. Выбірайце значэнне з рэальных паводзін праграмы пры скідванні і запішыце, што можа быць страчана, калі ліміт спрацуе. Лік, выбраны таму што машына павінна выключыцца хутчэй, — гэта настройка страты даных у маскіроўцы.
Калі спыненне ўсё яшчэ павольнае, зафіксуйце юніт, яго даччыныя працэсы, інтэрвал журнала і вынік тайм-аўту. Скарачэнне ўсіх тайм-аўтаў або зварот да шырокага забойства — гэта шлях да таго, каб чыстыя спыненні ператвараліся ў пашкоджаны стан пры наступнай загрузцы.
Адключыцеся праз уладальніка, потым праверце тры выпадкі
Калі спажыўцы спынены, папрасіце менеджар, які валодае тунэлем, адключыцца: экзэмпляр systemd, актыўнае злучэнне NetworkManager або служба пастаўшчыка. Забойства незвязанага працэсу OpenVPN не абавязкова выдаляе сеанс, які даў маршрут, а проксі з палітыкай перазапуску можа аднавіць запыт, пакуль вы разбіраеце шлях. Узгадніце гэтую палітыку з планаваным спыненнем, перш чым пачаць.
Праверце звычайнае спыненне, спыненне з актыўным запытам і спыненне, дзе тунэль адмаўляе першым. Паўтаральная паслядоўнасць з дэдлайнам лепш за хуткае выключэнне, якое спрацоўвае адзін раз.