我正在使用node.js编写一个守护进程,运行在systemd下,它将使用监测树莓皮2B上电源电压的状态。
我正在使用node.js包装器到猪皮库
我开始使用的代码如下:
var Gpio = require('pigpio').Gpio,
gpio;
gpio = new Gpio(35);
const checkIntervalDuringBrownout = 5000;
const checkIntervalDuringGoodSupply = 100;
var timer = 100;
function startTimer() {
setTimeout(function() {
var brownoutState = isUnderVoltage();
if(brownoutState) {
console.log("Brownout - telling the syslog ...");
console.log("Brownout ... Power Supply Voltage went below 4.63 V");
timer = checkIntervalDuringBrownout;
}
else {
timer = checkIntervalDuringGoodSupply;
}
startTimer();
}, timer);
}
function isUnderVoltage() {
var ledStatus = gpio.digitalRead();
if(ledStatus === 1) {
return 0;
}
else if (ledStatus === 0) {
//console.log("brownout");
return 1;
}
else {
console.log("We got neither a 1 or a 0: ", ledStatus);
}
}
startTimer();在syslog中得到神秘的错误消息:
Aug 2 00:22:10 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js.
Aug 2 00:22:11 chintu brownout-monitor[5203]: 2017-08-02 00:22:11 initMboxBlock: init mbox zaps failed
Aug 2 00:22:11 chintu brownout-monitor[5203]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11
Aug 2 00:22:11 chintu brownout-monitor[5203]: pigpio.gpioInitialise();
Aug 2 00:22:11 chintu brownout-monitor[5203]: ^
Aug 2 00:22:11 chintu brownout-monitor[5203]: Error: pigpio error -1 in gpioInitialise
Aug 2 00:22:11 chintu brownout-monitor[5203]: at Error (native)
Aug 2 00:22:11 chintu brownout-monitor[5203]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12)
Aug 2 00:22:11 chintu brownout-monitor[5203]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3)和
Aug 2 00:17:11 chintu systemd[1]: Starting Brownout Monitor and Logger written using node.js...
Aug 2 00:17:11 chintu systemd[1]: Started Brownout Monitor and Logger written using node.js.
Aug 2 00:17:12 chintu brownout-monitor[4555]: 2017-08-02 00:17:12 initInitialise: Can't lock /var/run/pigpio.pid
Aug 2 00:17:12 chintu brownout-monitor[4555]: /home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11
Aug 2 00:17:12 chintu brownout-monitor[4555]: pigpio.gpioInitialise();
Aug 2 00:17:12 chintu brownout-monitor[4555]: ^
Aug 2 00:17:12 chintu brownout-monitor[4555]: Error: pigpio error -1 in gpioInitialise
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Error (native)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at initializePigpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:11:12)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at new Gpio (/home/pi/sandbox/raspi2-power-monitor/node_modules/pigpio/pigpio.js:25:3)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Object.<anonymous> (/home/pi/sandbox/raspi2-power-monitor/index.js:7:8)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module._compile (module.js:570:32)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Object.Module._extensions..js (module.js:579:10)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module.load (module.js:487:32)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at tryModuleLoad (module.js:446:12)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Function.Module._load (module.js:438:3)
Aug 2 00:17:12 chintu brownout-monitor[4555]: at Module.runMain (module.js:604:10)
Aug 2 00:17:12 chintu systemd[1]: brownout-monitor.service: main process exited, code=exited, status=1/FAILURE
Aug 2 00:17:12 chintu systemd[1]: Unit brownout-monitor.service entered failed state.查找这些错误,带我看了一页,其中的解决方案说-
我必须检查代码,但最有可能的是GPU (分配mbox内存)没有空闲内存。
怎么解决这个问题呢?
发布于 2017-08-02 16:57:44
修复错误的解决方案是:
处理systemd发送到节点进程的信号,并确保pigpio库使用处理程序中的pigpio.terminate()调用完成干净的终止。
process.on('SIGHUP', shutdown);
process.on('SIGINT', shutdown);
process.on('SIGCONT', shutdown);
process.on('SIGTERM', shutdown);
function shutdown() {
pigpio.terminate();
clearInterval(timerVar);
console.log('raspi2-brownout-watcher must exit, performed cleanup.');
process.exit(0);
}https://stackoverflow.com/questions/45466816
复制相似问题