Отвалился сервис wb-rules

Сегодня обнаружил, что перестали обновляться значения виртуальных устройств. В /var/log/messages вот такая портянка. Перезапустил сервис wb-rules, все стало ок, но хотелось бы разобраться в проблеме, чтобы избежать ее в дальнейшем. Устройство - wb4, если нужны еще какие-то данные - пришлю.

Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:38 pre
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:47 pre
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:26 pre
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:38 pre
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:47 pre
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:08 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	ensureCell /usr/share/wb-rules-system/scripts/lib.js:48 	anon /usr/share/wb-rules-system/scripts/lib.js:54 preventsyield 	cellValue 
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	ensureCell /usr/share/wb-rules-system/scripts/lib.js:48 	anon /usr/share/wb-rules-system/scripts/lib.js:54 preventsyield 	cellValue 
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /etc/wb-rules/water.js:18 preventsyield 	call  native s
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:09 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	ensureCell /usr/share/wb-rules-system/scripts/lib.js:48 	anon /usr/share/wb-rules-system/scripts/lib.js:54 preventsyield 	cellValue 
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	ensureCell /usr/share/wb-rules-system/scripts/lib.js:48 	anon /usr/share/wb-rules-system/scripts/lib.js:54 preventsyield 	cellValue 
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:10 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:38 pre
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:47 pre
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	firing /usr/share/wb-rules-system/scripts/lib.js:198 preventsyield 	anon /etc/wb-rules/ups.js:19 preventsyield 	apply  native strict
Sep 17 17:56:11 wirenboard-A35U7J4I daemon.info wb-rules[2646]: ERROR: [rule error] ECMAScript error: RangeError: valstack limit 	duk_api_stack.c:571 	getDevValue /usr/share/wb-rules-system/scripts/lib.js:37 preventsyield 	anon /usr/share/wb-rules-system/rules/power_status.js:38 pre

Доброго времени,

Можете поделиться скриптом, который вызывает ошибку, и версией wb-rules? (dpkg -s wb-rules)

У WB случается, что скрипты работают очень странно… Не так давно случилось следующее: не сработал скрипт на закрытие кранов при изменении состояния датчиков протечки. Сделано таким образом - датчики отслеживаются сервисом Alarm, по изменению топика alarm срабатывает скрипт на управление. Когда все это настраивал - нормально работало.

Так вот, недавно alarm сработал, пришли оповещения по почте и SMS, а кран не закрылся. Разумеется, сервис wb-rules не отваливался. Другие скрипты (например со светом) работали нормально. Скрипты лежат в виде нескольких файлов. Начал проверять - не работает скрипт… заработало только после того, как я просто пересохранил файл с этим скриптом из web интерфейса. Объяснить сие не могу… Но в итоге я просто перенес скрипт в ioBroker, куда раньше много чего перенес с WB, вот теперь дошло и до управления протечками. По крайней мере подобных глюков там не замечалось.

К вам такая же просьба - если не сложно, можете показать файл скрипта и файл конфигурации алармов? Проверяли лог /var/log/messages на наличие сообщений об ошибках от wb-rules? (cat /var/log/messages | grep rules)

Судя по логам, валится не какой-то определенный скрипт, а все, что у меня есть (я лог не весь выложил, он очень длинный был). Ну вот, например ups.js

startTicker("clickTimer", 5000);

defineVirtualDevice('ups', {
    title: 'UPS',
    cells: {
        'Battery charge' : {
            type : 'text',
          	value: 'test'
        },
        'Input voltage' : {
            type : 'text',
          	value: 'test'
        } 
    }
});

defineRule("doClick", {
  when: function () {
    return timers.clickTimer.firing;
  },
  then: function () {
    runShellCommand("upsc ups@192.168.34.6 | grep battery.charge: | awk '{print $2}'", {
      captureOutput: true,
      exitCallback: function (exitCode, capturedOutput) {
		dev['ups']['Battery charge'] = capturedOutput;
      }
    });	
    runShellCommand("upsc ups@192.168.34.6 | grep input.voltage: | awk '{print $2}'", {
      captureOutput: true,
      exitCallback: function (exitCode, capturedOutput) {
		dev['ups']['Input voltage'] = capturedOutput;
      }
    });	    
  }
});

А вот - water.js

defineVirtualDevice('water', {
    title: 'Water', //
    cells: {
        'Input pressure' : {
            type : 'text',
            value : ''
        }
    }
});

defineRule('dl_set_water_pressure', {
    whenChanged: [
		'wb-adc/A3'
    ],
    then: function (newValue, devName, cellName) {
      	var coefficient = 0.8;
      	var shift = 0.5;
        dev.water['Input pressure'] = (coefficient * newValue + shift).toFixed(1);
    }
});

Да, в правилах нет ничего сильно подозрительного.

И всё-таки можете сообщить версию движка правил? Возможно, это уже было исправлено ранее.

Извиняюсь, совсем забыл. Вот:

root@wirenboard-A35U7J4I:~# dpkg -s wb-rules
Package: wb-rules
Status: install ok installed
Priority: optional
Section: misc
Installed-Size: 6616
Maintainer: Ivan Shvedunov <ivan4th@gmail.com>
Architecture: armel
Version: 1.6.8
Depends: libc6 (>= 2.13)
Breaks: wb-mqtt-confed (<< 1.0.2)
Conffiles:
 /etc/init.d/wb-rules 75e917189e7e80b91bb2df0e1c3033ae
 /etc/wb-configs.d/13wb-rules 1236e2e4343d949e0a21de865706c00b
 /etc/wb-rules/alarms.conf 2051dd214a6232c5e778c50e52d5fb6a
 /etc/wb-rules/rules.js 926c30d0fd63e272f6f9ad370dffb1b0
Description: Wiren Board Rule Engine

Что скажете насчет версии?

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

Скажите, пожалуйста, сколько времени прошло с момента запуска движка / сохранения скрипта до появления ошибки? Сейчас важно попробовать устойчиво воспроизвести эту ошибку, чтобы разобраться с ней.

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

удалось ли найти решение данной проблемы?

Wb-rules за прошедшие годы уже два раза переписался, не думаю что актуально.