众所周知,日志文件肯定需要按天或者按大小切割,超过需要保留的天数就应该删除。如果日志删除不了,占满空间则会影响很多服务。
背景:进程守护使用pm2,日志轮转使用pm2-logrotate,系统使用 Windows。
问题:在linux系统下,过期数据按照配置删除,但是windows系统下并没有删除,导致数据越来越多,需要人工删除或者自己再写一个删除脚本,很麻烦。
目标:找到为什么在windows下没有删除成功,以及如何修复。
先看pm2-logrotate 删除的代码。
function delete_old(file) {
if (file === "/dev/null") return;
var fileBaseName = file.substr(0, file.length - 4).split('/').pop() + "__";
var dirName = path.dirname(file);
fs.readdir(dirName, function(err, files) {
var i, len;
if (err) return pmx.notify(err);
var rotated_files = [];
for (i = 0, len = files.length; i < len; i++) {
if (files[i].indexOf(fileBaseName) >= 0)
rotated_files.push(files[i]);
}
rotated_files.sort().reverse();
for (i = rotated_files.length - 1; i >= RETAIN; i--) {
(function(i) {
fs.unlink(path.resolve(dirName, rotated_files[i]), function (err) {
if (err) return console.error(err);
console.log('"' + rotated_files[i] + '" has been deleted');
});
})(i);
}
});
}
代码很好理解,偷懒的也可以直接丢给deepseek分析。 可以看到第三行有问题:文件路径切割的时候,这里已经写死了,但是Windows下路径分隔符为''。导致后面匹配不上。
修改的话,偷懒的话直接修改源代码,将分隔符改为''.
源代码位置在: