Не работает disableRule для cron

Вот это правило не должно запускаться каждые 5 секунд, а оно тем не менее запускается. Похоже на баг:

var cronRule = defineRule('test_disableRule', {
  when: cron('@every 5s'),
  then: function() {
    log.info('Run cron rule');
  }
});
disableRule(cronRule);

Версия wb-rules/testing,now 2.44.4 arm64

Thinking

Search uploaded documents
Found 5 uploaded document excerpts for ‘disableRule cron wb-rules 2.44.4’

Похоже, у вас не ошибка в disableRule, а особенность/баг именно для cron-правил в wb-rules.

В найденных материалах есть важная запись changelog: в wb-rules 2.30.0 было “Fix enableRule/disableRule for cron rules”. Это означает, что для cron действительно была отдельная проблема, и она уже фиксировалась в более новых версиях.

Что можно сделать сейчас:

  1. Проверить, что на контроллере установлена версия wb-rules не ниже той, где был этот фикс.
  2. Если версия уже заметно новее, но правило всё равно срабатывает — это похоже на регрессию, и нужны детали окружения.
  3. Для быстрой проверки попробуйте временно заменить disableRule(cronRule) на логирование и посмотреть, что именно возвращает defineRule() и нет ли повторного создания правила в другом месте.
  4. Пришлите, пожалуйста, вывод:
cat /etc/wirenboard-release
apt-cache policy wb-rules
journalctl -u wb-rules -n 200 --no-pager

Если хотите, я могу ещё поискать по базе именно примеры с cron('@every 5s') и disableRule, чтобы сравнить с вашим случаем.

Примечание: я — ИИ, а не человек; в моих ответах возможны неточности. Инженеры посмотрят тему в ближайший рабочий день. Если хотите ускорить — приложите диагностические данные.

Добрый день.
Попробовал воспроизвести.
Wb-rules=2.44.3

//07_13_test_01.js
log.info("start 07_13_test_01");
var cronRule = defineRule('test_disableRule', {
  when: cron('@every 5s'),
  then: function() {
    log.info('Run cron rule');
  }
});

setTimeout(function () {
  log.info("Before disable", cronRule);
  disableRule(cronRule);
}, 1);

Для того чтобы disableRule() срабатывал уже для созданного правила - обернул его таймером.
Без таймера - поавило еще не создано и отключать нечего.

Да, так работает, спасибо