Ежемесячная автоматизация с триггером не работает как ожидалось

Привет!

У меня возникла проблема с автоматизацией, которая должна запускаться в начале месяца. Несмотря на то, что она включена, она не запускается автоматически. Я не могу найти никаких логов или способа отладить, почему она не работает сама по себе, хотя должна. Кто-нибудь знает, как можно решить эту проблему?

Как видно ниже, автоматизация должна автоматически «Запланировать встречу с результатами Data Explorer» каждый месяц. Если я нажму «Запустить сейчас», всё работает как положено: пользователи, добавленные в список, получат результаты Data Explorer, а также CSV-файл. Однако автоматический запуск не работает.

Буду признателен за любую обратную связь или предложения, которые помогут мне решить эту проблему. Спасибо!

1 лайк

Вы подтвердили точную запланированную дату и настройку часового пояса, а также, если доступна, включили кнопку «Запустить пропущенные задания»?

1 лайк

Проводили ли вы какие-либо тесты, чтобы убедиться, что все критерии выполняются естественным образом (кроме trigger now)?

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

Также я полагаю, что ваша целевая аудитория должна иметь доступ к запросу в Data Explorer.

1 лайк

Привет

Спасибо за помощь.. @kairo162 @putty

Да.. но проблема не в том, что задача не выполняется в запланированную дату/время, а в том, что она вообще не выполняется.

Где я могу найти эту кнопку, пожалуйста?

Ожидается, что система отправит прямое личное сообщение двум пользователям. Пользователям передан общий запрос. Спасибо за предложение протестировать, изменив расписание. Я также попробую поэкспериментировать с тестовой группой.

2 лайка

Главное отличие, которое я заметил, заключается в том, что в вашем интерфейсе не отображается, когда должно сработать следующее автоматическое действие.

Я бы начал с создания новой автоматизации с теми же настройками и проверил, появляется ли у неё «дата следующего срабатывания» после включения.

1 лайк

Я использую этот самый сценарий автоматизации в нескольких местах без проблем. Вот как выглядит моя конфигурация в одном из них — для этого теста я изменил периодичность на 5 минут вместо недели, но при установке недельного интервала она срабатывает еженедельно, как и ожидалось:

PM (tech-admin — это группа)

Попробуйте запустить автоматизацию, а затем посмотрите логи в yoursite/logs.

1 лайк

Я вижу это:

Попробуйте, возможно, убрать эмодзи «ручки управления» из имени скрипта и заголовка запроса в Data Explorer. Это может нарушать структуру полезной нагрузки (хотя, кажется, они должны быть допустимы).

1 лайк

Привет @Moin @Lilly

Спасибо за помощь! Боюсь, что загадка всё ещё не разгадана… вот почему:

До «даты запуска» всё выглядело именно так, с сообщением «Следующий запуск автоматизации будет в: [дата/время]»; однако после того, как это дата/время прошло без успешного выполнения, сообщение исчезло. Во время тестирования я изменил интервал на 1 минуту, и сообщение о запуске снова появилось. В прошлом месяце, когда автоматизация не сработала, я обновил таймер, и появилось сообщение о том, что запуск произойдёт в первый час следующего месяца (но этого не случилось).

На самом деле она работала и срабатывала в некоторые месяцы, но не в другие, поэтому причина неясна, но теперь, похоже, она больше никогда не активируется автоматически. Какая у вас версия Discourse? У меня 2026.5.0-latest…

К сожалению, даже при ручном запуске в /logs ничего не появляется. (У меня выбраны все опции).

Я не думаю, что это проблема, потому что я изменил триггер на 1 минуту, и сообщение было отправлено:

У меня тоже, и я обновляюсь как минимум раз в неделю.

2 лайка

Хорошо, спасибо! Не могли бы вы попробовать настроить автоматизированное тестирование с ежемесячным запуском?

У меня есть подозрение, что проблема в триггере «ежемесячно», потому что при изменении его на запуск раз в минуту всё работает.

1 лайк

Хорошо, я установил период в один месяц, запустил тест, и всё сработало. Но ждать целый месяц ради проверки здесь не очень практично. Я попробую изменить дату запуска через пару минут.

редактирование: ежемесячный запуск, похоже, работает у меня.

Если у вас всё работает, возможно, ошибка возникает только у некоторых пользователей?

Окей, так сегодня я и Мойн обсуждали этот случай, и она упомянула, что, возможно, есть баг при использовании параметра «ежемесячно», поскольку длина месяца варьируется? Конечно, она была права — отчасти… :stuck_out_tongue:

В любом случае, я немного покопался :detective:

Мне не удалось найти скрипт автоматизации для schedule pm with data-explorer results в основной папке plugins/automation/lib/discourse_automation/scripts, значит, он где-то спрятан.

Однако я посмотрел на логику здесь для повторяющихся событий (предположительно, этот скрипт использует её) в файле plugins/automation/lib/discourse_automation/triggers/recurring.rb:

Я думаю, что базовый код для ежемесячных повторяющихся автоматизаций вычисляет N-й день недели вместо фактической календарной даты, и здесь возникает несоответствие логики с параметром Calendar day — при внедрении BYDAY=#{count}#{byday} в RRule автоматизация принудительно привязывается к дню недели, тогда как следовало бы использовать BYMONTHDAY вместо BYDAY.

Так, если вы настроите автоматизацию на запуск 15 апреля (который, кстати, является 3-й средой апреля), система интерпретирует правило как: запускать в 3-ю среду каждого месяца.

Когда наступает май, 3-я среда — это 20 мая, из-за чего расписание сдвигается на 5 дней.

Более того, если вы установите автоматизацию на 30-е или 31-е число месяца (например, «5-я вторник»), система будет искать 5-й вторник в следующем месяце. Если в этом месяце всего 4 вторника, автоматизация полностью не сможет найти валидную дату и тихо пропустит весь месяц.

У меня есть протестированное исправление, и я готовлю PR, если команда захочет его проверить. Оно меняет логику с N-го дня недели на точную календарную дату.


Вот несколько скриншотов моих тестов и отладки:

Два экземпляра: один без исправления, другой с моим исправлением логики.

Создайте идентичную автоматизацию в обоих (исправленная версия справа):

Обратите внимание на различия в баннерах с сообщением «Следующая автоматизация сработает в:» — сдвиг составляет 5 дней: неотредактированная версия смещается к третьей среде (20 мая), вместо 15 мая.

Например, месяцы могут полностью пропускаться, если система ищет 4-й четверг вместо конкретной даты.

Тот же результат можно проверить в консоли Rails.

Без исправления:

С исправлением:

PR здесь:

Редактирование: похоже, что баг затрагивает любой скрипт автоматизации, использующий триггер recurring, настроенный на запуск каждый месяц. :grimacing:

Я также могу воспроизвести иногда пустой баннер, например, если установить дату начала на 29 апреля 2026 года, то система не сможет найти 5-ю среду в мае, так как её не существует — автоматизация не сработает здесь (неисправленная версия слева, исправленная справа):

Похоже, что баг вызывает NoMethodError в Rails, когда не удаётся найти N-й день недели, как в примере выше; отсюда пустой баннер следующего запуска и сбой выполнения:

2 лайка

@j.jaffeux, не мог бы ты быстро взглянуть на это :eyes:?

1 лайк

Просто отмечу, что в процессе отладки у меня возникла мысль, что текущее поведение может быть намеренным (учитывая, что тесты спецификации были настроены с «плавающими» днями). Однако я считаю, что администраторы, настраивающие эту автоматизацию, скорее всего, ожидают календарный месяц, а не «N-й день месяца». Пропуск месяцев в автоматизации, когда не удаётся найти N-й день месяца, является проблематичным.

edit: только что добавил исправление для граничного случая и тесты спецификации для ситуации, когда не удаётся найти точное совпадение даты на следующий месяц — в таком случае берётся последний день месяца (например, 31 января → 28 февраля). Также учтён високосный год.

2 лайка

Привет, @Lilly

Большое спасибо за то, что занялись этим вопросом. Не знаю, было ли ваше исправление уже включено в основную версию и решит ли оно проблему с датами месяца. Однако, полагаю, что если я обновлю триггер для каждого месяца отдельно, всё должно сработать, верно?

Иными словами, мне нужно будет вручную обновлять триггер на конкретный день каждого месяца, и тогда он сработает. Если я правильно понял, проблема заключалась в том, когда система пыталась выбрать день самостоятельно. Надеюсь, ваше исправление решит эту проблему… Вижу, что бот для пакетной обработки доставил вам некоторые трудности, но надеюсь, что всё пройдёт хорошо. Ещё раз спасибо за вашу помощь!

Спасибо всем! <3

Извините, мой PR ещё не принят и находится в ожидании финальной проверки от участника команды. На данный момент вы можете попробовать обновить триггер, указав другую дату. Просто убедитесь при настройке, что всплывающее сообщение «следующий запуск триггера» показывает правильную следующую ежемесячную дату запуска.

1 лайк