温馨提示×

Linux JS日志清理方法

小樊
48
2025-09-17 12:56:26
栏目: 编程语言

Linux下JS日志清理的常用方法

1. 定位JS日志文件位置

在清理前,需先确定JS日志的存储路径。常见位置包括:

  • 项目自身logs目录(如/home/user/project/logs/*.log);
  • 系统日志目录(如/var/log/js_app.log/var/log/nodejs/*.log)。
    可使用find命令快速查找:find /path/to/search -type f -name "*.log"(替换为实际搜索路径)。

2. 手动清理日志(临时解决)

清空单个日志文件

若只需清空文件内容(保留文件本身),可使用重定向到空内容的命令:
> /path/to/logfile.log
或使用truncate命令:truncate -s 0 /path/to/logfile.log(快速清空大文件)。

删除单个日志文件

若需彻底删除文件(释放磁盘空间),使用rm命令:
rm /path/to/logfile.log
注意:删除前确认文件无重要数据,避免误操作。

批量删除旧日志

通过find命令按修改时间(mtime)筛选并删除旧日志(如7天前):
find /path/to/logs -type f -name "*.log" -mtime +7 -exec rm -f {} \;

  • -type f:仅匹配文件;
  • -name "*.log":匹配所有.log后缀文件;
  • -mtime +7:修改时间超过7天的文件;
  • -exec rm -f {} \;:对匹配的文件执行rm -f删除。

3. 使用logrotate自动化轮转与清理(推荐)

logrotate是Linux系统自带的日志管理工具,可自动完成日志轮转(分割)、压缩、删除,避免手动操作麻烦。

安装logrotate

多数发行版默认安装,未安装时使用包管理器安装:

  • Debian/Ubuntu:sudo apt-get install logrotate
  • CentOS/RHEL:sudo yum install logrotate

配置logrotate

针对JS日志创建单独配置文件(如/etc/logrotate.d/js_app),内容示例如下:

/path/to/js/logs/*.log {  # 日志文件路径(支持通配符)
    daily                # 每天轮转一次
    rotate 7             # 保留最近7个轮转文件
    compress             # 压缩旧日志(如.gz格式)
    delaycompress        # 延迟压缩(当前轮转的日志不压缩,下一个周期再压缩)
    missingok            # 日志文件不存在时不报错
    notifempty           # 日志为空时不轮转
    create 0640 root adm # 创建新日志文件,权限640,属主root,属组adm
}

保存后,logrotate会根据配置自动执行(默认每天运行一次)。

手动触发logrotate

若需立即执行轮转,可使用以下命令:
sudo logrotate -vf /etc/logrotate.d/js_app

  • -v:显示详细过程;
  • -f:强制轮转(即使未到轮转时间)。

4. 使用journalctl清理systemd系统日志(针对systemd服务)

若JS应用通过systemd(如nodejs.service)运行,其日志由journalctl管理,可通过以下命令清理:

清理指定时间前的日志

例如删除2周前的日志:
sudo journalctl --vacuum-time=2weeks
或删除1GB以上的日志:
sudo journalctl --vacuum-size=1G

查看日志占用空间

sudo journalctl --disk-usage(显示当前日志占用的磁盘空间)。

5. 自动化定期清理(长期维护)

为避免日志堆积,建议通过cron定时任务定期执行清理脚本。

创建清理脚本

例如/home/user/cleanup_js_logs.sh,内容如下:

#!/bin/bash
LOG_DIR="/path/to/js/logs"  # 日志目录
DAYS_TO_KEEP=7              # 保留天数

# 查找并删除超过指定天数的日志文件
find "$LOG_DIR" -type f -name "*.log" -mtime +"$DAYS_TO_KEEP" -exec rm -f {} \;

# 可选:清空特定大日志文件(如nohup.log)
NOHUP_LOG="$LOG_DIR/nohup.log"
if [ -f "$NOHUP_LOG" ]; then
    cat /dev/null > "$NOHUP_LOG"  # 清空文件内容
    echo "$(date): $NOHUP_LOG has been truncated." >> /var/log/cleanup.log
fi

赋予脚本执行权限:chmod +x /home/user/cleanup_js_logs.sh

添加cron任务

编辑当前用户的cron表:crontab -e,添加以下行(每天凌晨1点运行):
0 1 * * * /home/user/cleanup_js_logs.sh
保存后,cron会自动执行脚本。

注意事项

  • 备份重要日志:清理前建议备份关键日志(如cp /path/to/logfile.log /backup/),防止误删;
  • 测试命令:首次执行findrm命令时,可先去掉-exec rm -f {} \;部分,确认匹配的文件无误后再执行删除;
  • 权限问题:清理系统日志(如/var/log下的文件)需root权限,使用sudo命令;
  • 应用层配置:若使用pm2winston等工具管理JS应用,可直接配置日志轮转(如pm2max_sizerotate_interval参数,或winston-daily-rotate-file库),减少手动维护成本。

0