Обидва вирази виглядають як ранок середи, і лише один із них означає один раз. 0 10 * * 3 спрацьовує о 10:00 у середу; * 10 * * 3 спрацьовує щохвилини десятої години, шістдесят шансів запустити той самий тунель. Якщо команда це запускач, який не перевіряє наявність сеансу, друга версія не помилка планування, а цикл, що створює конкуруючих власників. Прочитайте поле хвилин перш ніж читати будь-що інше.

П'ять полів це хвилина, година, день місяця, місяць і день тижня, саме в такому порядку, а зірочка в першому означає кожну хвилину.

Поле хвилин вирішує, скільки разів

Провідне число це хвилина, тому 0 10 * * 3 це перша хвилина десятої години в середу. Заміна його на зірочку зберігає годину й день і скасовує властивість лише-один-раз, що дає шістдесят збігів. Cron не видаляє дублікати: кожен збіг знову запускає команду. Це не тонкість cron, це семантика полів, і довідку встановленого планувальника варто прочитати, бо порядок полів і необов'язковий стовпець імені користувача різняться в користувацькому та системному crontab.

Перевірте нешкідливою командою, яка протягом доби записує власну позначку часу. Один рядок у журналі це розклад; шістдесят рядків за годину це урок.

Що другий запуск робить із першим

Вихований запускач помічає, що з'єднання вже встановлене, і нічого не робить. Сирий виклик openvpn ні: він створює ще один процес, ще одну спробу зайняти пристрій або порт, і ще один набір маршрутів, що конкурують за ті самі призначення. У NetworkManager повторні запити активації для одного з'єднання зазвичай ідемпотентні, і саме тому проблема залишається прихованою, доки хтось не скористається іншою командою. Розклад має питати власника, який уже керує тунелем.

Далі вирішіть, що означає запит, поки з'єднання встановлюється. Ні подвійна активація, ні черга очікуваних запусків не є очевидно правильними; виберіть одне й змусьте запускач це реалізувати, замість того щоб планувальник вирішував випадково.

Порахуйте поля перед командою

Користувацький і системний crontab різняться тим, чи є перед командою стовпець з іменем користувача. Запис, скопійований між ними, або виконується під неправильним обліковим записом, або передає ім'я користувача як перше слово команди. Перевіряйте встановлену довідку, а не посібник, і рахуйте поля у власному рядку. Запис із п'ятьма полями й шостим словом перед командою це системний crontab; той самий рядок у користувацькому crontab намагається виконати це слово як програму.

Ідентичність виконання несе із собою середовище. Завдання cron не успадковує розблоковану зв'язку ключів, інтерактивний запит пароля або робочий каталог, у якому ви тестували.

Чекайте готовності, а не годинника

Успішний запуск це ще не працюючий тунель. Можливо, коли завдання завершується, клієнт ще розв'язує свою кінцеву точку, проходить автентифікацію або встановлює маршрути. Будь-яке залежне завдання має чекати на захищений ресурс, який йому справді потрібен, з обмеженим тайм-аутом і зареєстрованою невдачею, а не на фіксовану кількість секунд. Ця різниця відокремлює розклад, який переважно працює, від того, що тихо збоїть у завантажений ранок.

Якщо в цю годину потрібна інтерактивна MFA, завдання може привернути увагу людини, але не може дати відповідь. Залишайте цей випадок явним, замість того щоб вбудовувати багаторазовий пароль або повторювати спроби безкінечно.

Для справді одноразової активації використовуйте підтримуваний одноразовий механізм. Повторюване правило, яке треба пам'ятати й видаляти, це майбутній подвійний запуск.

Схожі статті