当Raspberry Pi断电时更改文本文件

问题描述 投票:0回答:2

我正在为我的Raspberry Pi编写一个小应用程序来监视我的环境,我想知道Raspberry Pi何时使用NodeJ失去了力量。

我发现你可以使用Pi发送的信号,SIGPWR,当它失去电源时。

我做了这个小测试脚本:

// test.js
var fs = require('fs');
var path = '/home/pi/Documents/Code/surveillanceCam/log/logfile.txt';

fs.writeFileSync(path, new Date().toString() + ': Start\n');

process.on('exit', function () {
    fs.appendFileSync(path, new Date().toString() + ': exit\n');
});

process.on('SIGPWR', function () {
    fs.appendFileSync(path, new Date().toString() + ': SIGPWR\n');
});

process.stdin.resume();

如果我用node test.js运行脚本,我在logfile.txt中得到一行以Start结束,这样就行了,如果我删除了最后一行(所以脚本在我停止之前不会运行),我也会得到一个带退出的新行到底。

但是如果我保留最后一行,那么脚本继续运行,然后我拉出Pi的电缆,然后再插入它。当我在启动后去看文件时,我只得到了最后一行的开头。

我想在我的logfile.txt中有两条线,一条是开始时间,另一条是断电时间。

从我所看到的,当电源丢失时发送SIGPWR信号。脚本没有足够的时间写入文件或者我还能做些什么吗?

编辑:我想要做的是模拟电源丢失和电源丢失时写入文件。

EDIT2:我想我将如何解决这个问题是添加一个process.on('SIGINT',...)信号。因此,当用户使用Ctrl + C结束程序时,我将然后只写入该文件。然后当节点服务器启动时,我将检查文件中是否有东西。如果没有,那么节点服务器没有正常关闭,我应该显示错误。

node.js raspberry-pi
2个回答
0
投票

拔掉电源不会是一个优雅的关机,我怀疑你是否可以依赖任何事件的可靠性来确定它是否关闭。这就是为什么当电力耗尽时,很多事情都会出现问题,因为事情无法优雅地关闭。一切都在操作系统甚至可能意识到之前就已经死了,所以没有任何东西可以正常关闭。


0
投票

检测此类情况的标准方法是在Pi启动时创建标记文件,并在正常关闭时删除它。

如果下次Pi启动时存在标志文件(你在创建它之前检查),你知道Pi因某些原因而崩溃(你不知道它是否是断电,内核恐慌或其他什么)。

除非您添加某种发送适当信号的电池备份单元,否则无法直接响应代码中的电源丢失。

© www.soinside.com 2019 - 2024. All rights reserved.