И двата израза изглеждат като сряда сутрин, но само единият означава веднъж. 0 10 * * 3 се задейства в 10:00 в сряда; * 10 * * 3 се задейства всяка минута от десетия час, шестдесет шанса да стартирате същия тунел. Ако командата е стартер, който не проверява за съществуваща сесия, втората версия не е грешка в разписанието, а цикъл, който създава конкуриращи се собственици. Прочетете полето за минути, преди да прочетете каквото и да е друго.

Петте полета са минута, час, ден от месеца, месец и ден от седмицата, в този ред, а звезда в първото означава всяка минута.

Полето за минути решава колко пъти

Водещото число е минутата, така че 0 10 * * 3 е първата минута от десетия час в сряда. Замяната му със звезда запазва часа и деня и премахва свойството само веднъж, което дава шестдесет съвпадения. Cron не премахва дубликати: всяко съвпадение стартира командата отново. Това не е тънкост за cron, а семантика на полетата, и си струва да прочетете справочника на инсталирания планировчик, защото редът на полетата и незадължителната колона с потребителско име се различават между потребителския и системния crontab.

Тествайте с безвредна команда, която записва собствен времеви печат за един ден. Един ред в журнала е разписание; шестдесет реда в рамките на час е урок.

Какво прави второто стартиране с първото

Добре възпитан стартер забелязва, че връзката вече е установена, и не прави нищо. Суровото извикване на openvpn не го прави: то създава друг процес, още един опит за завързване на устройство или порт, и още един набор от маршрути, които се конкурират за същите дестинации. В NetworkManager повторните заявки за активиране на една връзка обикновено са идемпотентни и точно затова проблемът остава скрит, докато някой не използва друга команда. Разписанието трябва да пита собственика, който вече управлява тунела.

След това решете какво означава заявка, докато връзката е в процес на установяване. Нито дублираното активиране, нито опашка от чакащи стартирания е очевидно правилно; изберете едно и накарайте стартера да го реализира, вместо планировчикът да решава случайно.

Пребройте полетата преди командата

Потребителският и системният crontab се различават по това дали преди командата се появява колона с потребителско име. Копиран между тях запис или се изпълнява под грешен акаунт, или подава потребителското име като първа дума от командата. Проверете инсталирания справочник, а не ръководство, и пребройте полетата в собствения си ред. Запис с пет полета и шеста дума преди командата е системен crontab; същият ред в потребителски crontab се опитва да изпълни тази дума като програма.

Идентичността на изпълнение носи средата със себе си. Задача на cron не наследява отключен ключодържател, интерактивна заявка за парола или работната директория, в която сте тествали.

Изчакайте готовност, а не часовника

Успешното стартиране не е работещ тунел. Клиентът може все още да разрешава крайната си точка, да се автентикира или да инсталира маршрути, когато задачата приключи. Всяка зависима задача трябва да изчака защитения ресурс, който наистина ѝ е нужен, с ограничен таймаут и регистриран отказ, вместо фиксиран брой секунди. Тази разлика отделя разписание, което работи в по-голямата част от времето, от такова, което тихо се проваля в натоварената сутрин.

Ако в този час се изисква интерактивна MFA, задачата може да потърси вниманието на човек, но не може да предостави отговора. Дръжте този случай явен, вместо да вграждате многократно използваема парола или да повтаряте опити безкрайно.

За наистина еднократно активиране използвайте поддържания механизъм за еднократно изпълнение. Повтарящо се правило, което трябва да се помни и премахва, е бъдещо дублирано стартиране.

Подобни статии