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

时间:2019-04-29 14:09:08

标签: node.js raspberry-pi

我正在为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中有2行,其中第一行是开始时间,另一行是断电时间。.

从我读到的内容来看,断电时会发送SIGPWR信号。脚本是否没有足够的时间来写入文件,或者我还能做些其他事情?

编辑:我要模拟的是断电,当断电时写入文件。

EDIT2 :我认为我要解决的问题是添加一个process.on('SIGINT',...)信号。因此,当用户使用Ctrl + C结束程序时,我将然后仅将其写入文件。然后,当节点服务器启动时,我将检查文件中是否包含某些内容。如果没有,则节点服务器没有正常关闭,我应该显示一个错误。

2 个答案:

答案 0 :(得分:0)

拔掉电源将无法正常关机,而且我怀疑您是否可以依靠任何事件的可靠性来确定事件是否关闭。这就是为什么这么多东西在断电时无法恢复的原因,因为无法正常关闭东西。一切都在操作系统可能甚至还没意识到之前就已经消亡了,所以没有任何事情能正常关闭。

答案 1 :(得分:0)

检测这种情况的标准方法是在Pi启动时创建标志文件,并在正常关机时将其删除。

如果标志文件在下次启动Pi时存在(在创建文件之前进行检查),则说明Pi是由于某种原因而崩溃(您不知道这是断电,内核崩溃还是其他原因) )。

除非添加某种能够发送适当信号的备用电池,否则无法直接响应代码中的断电。