定期检查和清理服务器中的文件

A regular checking and cleaning of files in the server

我有以下 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)。

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

识别要删除的文件

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

date -r $filename

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

删除文件

只需使用

删除文件
rm -rf $filename

已在上一步中识别。

添加到 cron

制作一个 cron 作业以每天调用此脚本。

您是否考虑过node-cron? EDIT: In combination with the fs.stats documentation you can use the mtime (modified time) to filter each file. And fs.readdir获取文件。