Запланированный запуск каждые 13 дней Azure конвейер - PullRequest
0 голосов
/ 06 января 2020

Я хочу написать добавить запланированный триггер для запуска конвейера в Azure один раз каждые 13 дней. Я не могу найти ответ с обычным синтаксисом заданий cron, и я видел, что вы можете комбинировать его с регулярными выражениями. Стартовый день не имеет значения не . Я думал о чем-то вроде этого:

schedules:
- cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))"
displayName: Every 13 days execution

Но я получаю синтаксическую ошибку. Как добавить регулярное выражение в запланированный тригер cron в azure?

Если вы выводите результат регулярного выражения: echo $((((($(date +%s) / 86400) % 13))==0)), вы можете видеть, что он работает как положено, теперь речь идет об использовании его с заданием cron в файле yaml.

Очевидно, что-то вроде: 0 0 */13 * * не работает, потому что это будет 13-го и 26-го, а с 26-го числа месяца до 13-го числа следующего больше 13 дней.

Редактировать: Будет ли 0 */312 * * * работать? Согласно https://crontab.guru/#0_ / 312_ _ _ кажется, что так и будет. Я просто не уверен, если это 24-часовой основе и, следовательно, никогда не работает? Потому что, раз в 312 часов, в день не бывает 312 часов, но если это не так, то все должно быть хорошо? Увидел, как парень писал что-то похожее на задании Cron каждые три дня и получил 15 голосов.

Второе редактирование: / 312 не работает. Частота не может быть выше 23, что имеет смысл. Не верьте всему, что читаете в стеке: -)

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Пожалуйста, дайте мне знать, если я ошибаюсь, но я пришел к следующему выводу:

  1. Вы не можете добавить такое регулярное выражение в секцию cron файла yaml - однако я не уверен в этом. Я просто не мог понять, как это сделать, и не нашел примеров в Интернете или документации Azure, где они используют регулярные выражения в файле yaml в разделе cron.
  2. Если вы посмотрите в моих правках я пытался сделать cron 0 */312 * * *, и в соответствии с https://crontab.guru/#0_ / 312_ _ _ он говорит: «В каждую минуту после каждого 312-й час. », Но часы индексируются круглосуточно, а cron не имеет состояния (он ничего не знает о предыдущих выполнениях, о времени, которое он выполнил, провалились они или нет и т. Д. c.), Поэтому он никогда не достигнет 312-й час, поскольку часы действительны в зависимости от часов. Он не предоставляет синтаксическую ошибку, он просто выполняется каждые 24 часа. Если вы хотите проверить это, я предлагаю вам сделать следующее:
touch /home/user/Desktop/everyminute.log
crontab -e

Добавьте в конец строки следующее:

*/1 * * * * echo "tick $(/bin/date)" >> /home/user/Desktop/everyminute.log
*/61 * * * * echo "tack $(/bin/date)" >> /home/user/Desktop/everyminute.log
*/100 * * * * echo "tock $(/bin/date)" >> /home/user/Desktop/everyminute.log

и затем выполните tail -f /home/user/Desktop/everyminute.log. Вы увидите, как каждый тик тик со временем, а когда час прошел, вы увидите тик, тэк и ток одновременно (через час), что подтверждает тот факт, что он проиндексирован на 60 ( когда минут) и я предполагаю то же самое в часах.

Итак, я закончил взломом. Я добавляю: cron 0 13 * * 0 в файл yaml, который запускается каждую неделю в воскресенье, и в моем фактическом bash скрипте, который выполняется в конвейере, я добавил if [ $(($(date +%V) % 2)) -eq 0 ] в строке 1, чтобы проверить, четна ли неделя или странный. Таким образом, конвейер по-прежнему выполняется каждую неделю (для его запуска требуется практически ноль ресурсов), но он выполняет задание, только если неделя четная. Кстати, это также означает, что это каждый 14-й день, а не каждый 13-й день, но я тоже мог бы это использовать.
0 голосов
/ 07 января 2020

schedules: - cron: "0 1 * * * $((((($(date +%s) / 86400) % 13))==0))" displayName: Every 13 days execution

Но я получаю синтаксическую ошибку.

Эта синтаксическая ошибка должна быть вызвана тем, что 6 записей включены, если требуется только 5 или отсутствует параметр branches в вашем schedules.

/ 312 не работает.

Я пробовал это, и он работает без ошибок:

schedules:
  - cron: "0 */312 * * *"
    displayName: Every 13 days execution
    branches:
      include:
        - master
    always: true

Что вы подразумеваете под "не работает", встречали ли вы какие-либо сообщение об ошибке? Если это так, пожалуйста, поделитесь ошибкой, с которой вы столкнулись.

...