Планаваная задача, якая прайшла без VPN, выглядае нармальна
Статус кажа пра поспех, а даных няма. Правярайце кожны запуск па дакладным злучэнні і запісвайце пропускі асобна, замест таго каб давяраць раскладу.
Статус задачы кажа пра поспех, журнал паказвае завершаны запуск, а даныя састарэлыя або адсутнічаюць. Такое спалучэнне звычайна азначае, што планаваная задача стартавала без патрэбнага шляху, і нешта ніжэй па потоцы праглынула збой. Расклад, які спрацоўвае своечасова, нічога не кажа пра гатоўнасць сеткі. Менавіта прамежак паміж гэтымі двума фактамі і ёсць месцам гэтага збою.
Допуск належыць запуску, а не існаванню файла cron.
Зялёны запуск — гэта не завершаная задача
Планавальнік адзначае, што працэс стартаваў і потым выйшаў; ён не мае ўяўлення, ці дасягнуў гэты працэс рэсурсу, для якога існуе. Скрыпт, які трактуе няўдалае злучэнне як пусты вынік або ловіць памылку і выходзіць з нулём, будзе выглядаць здаровым вечна. Сімптом — не чырвоны статус; гэта праўдападобны статус, прывязаны да адсутнай працы.
Назвіце, што запуску насамрэч патрэбна, перш чым вырашаць, як гэта правяраць. Рэзервовай копіі могуць спатрэбіцца прыватны DNS і аўтэнтыфікаваная канчатковая кропка, а не проста працэс тунеля.
Правярайце злучэнне, а не імя інтэрфейса
Інтэрфейс з імем tun0 можа існаваць без важнай сесіі, і іншае злучэнне можа валодаць гэтым імем. Правярайце канкрэтны аб'ект, ад якога залежыць задача: адну ідэнтычнасць профілю, адзін экзэмпляр сэрвісу або невялікую зацверджаную аперацыю супраць рэсурсу. Трымайце праверку абмежаванай у часе і трымайце ўліковыя даныя па-за аргументамі працэсу і дыягнастычнымі журналамі.
Вызначце таксама вынік адключэння. Звычайны пропуск, паўтор унутры кароткага акна і бачная аператару прапушчаная мяжа — гэта тры розныя адказы, і паўторны расклад не выбірае паміж імі.
Пропускі і збоі — гэта розныя вынікі
[Service] Type=oneshot User=worker ExecCondition=/usr/local/libexec/check-office-path ExecStart=/usr/local/bin/private-task
У разгортванні systemd ExecCondition= запускае гэты правяральнік перад нагрузкай. Яго паводзіны пры выхадзе канкрэтныя: нуль працягвае, коды ад аднаго да 254 прапускаюць астатнія каманды запуску, не пазначаючы модуль як няўдалы, а 255 або аварыйнае завяршэнне робіць яго няўдалым. Гэта дае тры розныя сігналы, якія карысныя толькі тады, калі кантракт правяральніка свядома супастаўлены з імі. Налады, якія пераазначаюць поспех, могуць змяніць карціну, таму дакументуйце супастаўленне.
Менавіта запіс пропускаў робіць дызайн сумленным. Прапушчаны запуск, які нідзе не з'яўляецца, неадрозны ад запуску, які атрымаўся, а трактоўка любой памылкі правяральніка як ціхага пропуску бясконца хавае зламанае разгортванне.
Ахоўвайце ўвесь запуск, а не толькі пачатак
Праверка гатоўнасці назірае за светам перад запускам; яна не кантралюе кожны сокет пасля. Калі прамы шлях ніколі не прымальны для гэтай задачы, далучыце зацверджаную палітыку выхаду, якая ўжываецца бесперапынна і ахоплівае DNS, IPv6 і ўласны транспарт тунеля. Пераключэнне глабальнага стану IPv6 хоста не заменіць абмежаванай палітыкі для задачы.
Вырашыце, ці можа новая падзея перакрываць задачу, якая яшчэ выконваецца, трымайце гэтае правіла ва ўладальніка нагрузкі і зрабіце паўтор бяспечным для аперацыі з данымі. Прыпыненне задачы пры адключэнні абмяжоўвае працу, але нічога не гарантуе адносна рэзервовага трафіку.
Прымайце працэс на трох выпадках: гатовы шлях, недаступны шлях і страта падчас выканання. Усё меншае правярае расклад, а не задачу.