【问题标题】:A regular checking and cleaning of files in the server定期检查和清理服务器中的文件
【发布时间】:2017-07-15 08:41:57
【问题描述】:

我有以下socket.io 的后端。每次我们在新的浏览器选项卡中通过localhost:3000 打开连接时,都会在服务器的文件夹tmp/ 中创建一个以套接字ID 命名的文件。

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket) {
    var fs = require('fs');
    fs.writeFile("tmp/" + socket.id, "hello", function (err) {
        if (err) { return console.log(err) };
        console.log('a file is saved!');
    });
});

因为套接字稍后可能会断开连接、处于非活动状态或空闲状态。我想在服务器中设置一个简单的清理规则。比如4pm的每天,我想删除昨天4pm之前保存的所有文件。

那么有谁知道如何设置这种每天定期检查+删除?

编辑 1: 在与 @georoot 讨论之后,我意识到我需要向刚刚删除 tmp 文件的连接发送通知消息。而且我希望所有 network 代码都包含在网站 nodejs 代码中(尽管 nodejs 代码可能会调用外部 bash)。

【问题讨论】:

  • cron job 你试过了吗?
  • 我明白了...所以你是说我不必在我的网站 javascript 代码中实现这个?我可以在我的服务器上单独安排一个作业吗?
  • 正是..它与fs有关,不需要任何nodejs。让我写一个简单的 bash 脚本来帮助你:)
  • 但是等等,在网站上实现这个还是有好处的。因为我可能想向刚刚删除 tmp 文件的(例如空闲)连接发送消息。
  • 你也可以在 bash 中做到这一点。你在 linux 中看到一切都是文件,你在 bash 中它会类似于 echo "message" > /tmp/socketid 假设我正确遵循并且 /tmp/socketid 已创建但 socketio 库....如果不是这样,您可以编写一个节点脚本并在删除文件之前调用它以将消息发送到连接

标签: node.js sockets socket.io timeout filesystems


【解决方案1】:

你考虑过node-cron吗? 编辑:结合fs.stats documentation,您可以使用mtime(修改时间)来过滤每个文件。和fs.readdir 获取文件。

【讨论】:

  • 好的...那我怎样才能删除最后保存在昨天下午 4 点之前的所有文件?
  • 这是最好的答案,并且会很快为您提供所需的内容。 - 您需要设置 node-cron,然后实际使用 fs 模块来进行文件系统检查和作业。在我身边工作。
【解决方案2】:

这比 nodejs 更多是与 bash 相关的问题。

确定要删除的文件

首先让我们编写一个脚本来检查在当前时间之前创建的文件24 hours。获取文件时间

date -r $filename

在循环内运行以查找需要删除的文件。您可以在这里简单地通过管道从ls 输出。

删除文件

只需使用删除文件

rm -rf $filename

在上一步中确定。

添加到定时任务

做一个定时任务来每天调用这个脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多