gpt4 book ai didi

javascript - Node.js 文件系统保存文件错误 56 EROFS,同时每 2 秒保存一次

转载 作者:搜寻专家 更新时间:2023-10-31 23:24:08 25 4
gpt4 key购买 nike

我在 raspbian 上运行 node.js 并尝试使用以下代码每 2/3 秒保存/更新一个文件:

var saveFileSaving = false;

function loop() {
mainLoop = setTimeout(function() {
// update data

saveSaveFile(data, function() {
//console.log("Saved data to file");
loop();
});
}, 1500);
}

function saveSaveFile(data, callback) {
if(!saveFileSaving) {
saveFileSaving = true;
var wstream = fs.createWriteStream(path.join(__dirname, 'save.json'));

wstream.on('finish', function () {
saveFileSaving = false;
callback(data);
});

wstream.on('error', function (error) {
console.log(error);
saveFileSaving = false;
wstream.end();
callback(null);
});

wstream.write(JSON.stringify(data));
wstream.end();
} else {
callback(null);
}
}

当我运行它时,它可以正常工作一个小时,然后开始吐出:

[25/May/2016 11:3:4 am]  { [Error: EROFS, open '<path to file>']
errno: 56,
code: 'EROFS',
path: '<path to file>' }

我试过 jsonfile 插件,它在一个小时后也发出了类似的写入错误。

我已经尝试过 fileSystem.writeFile 和 fileSystem.writeFileSync 都在一小时后给出相同的错误。

我认为这与处理程序在新保存发生之前没有被释放有关,这就是我开始使用 saveFileSaving 标志的原因。

通过硬重置重置系统可以解决问题(软重置不起作用,因为系统似乎已锁定)。

有什么建议吗?我在网上搜索过,所以只发现了一个与 4 年前略有相似的其他问题,该问题被搁置了。

注意:我正在使用代码中的回调函数继续主循环。

最佳答案

我能够通过取消链接文件并在每次保存时保存文件来实现这一点,虽然它不是很好但它可以工作并且不会造成太多开销。

我还添加了一个备份解决方案,每 5 分钟保存一次备份,以防保存文件出现问题。

感谢大家的帮助。

关于javascript - Node.js 文件系统保存文件错误 56 EROFS,同时每 2 秒保存一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com