Linux下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"(替换为实际搜索路径)。若只需清空文件内容(保留文件本身),可使用重定向到空内容的命令:
> /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删除。logrotate是Linux系统自带的日志管理工具,可自动完成日志轮转(分割)、压缩、删除,避免手动操作麻烦。
多数发行版默认安装,未安装时使用包管理器安装:
sudo apt-get install logrotate;sudo yum install 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会根据配置自动执行(默认每天运行一次)。
若需立即执行轮转,可使用以下命令:
sudo logrotate -vf /etc/logrotate.d/js_app
-v:显示详细过程;-f:强制轮转(即使未到轮转时间)。若JS应用通过systemd(如nodejs.service)运行,其日志由journalctl管理,可通过以下命令清理:
例如删除2周前的日志:
sudo journalctl --vacuum-time=2weeks
或删除1GB以上的日志:
sudo journalctl --vacuum-size=1G。
sudo journalctl --disk-usage(显示当前日志占用的磁盘空间)。
为避免日志堆积,建议通过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表:crontab -e,添加以下行(每天凌晨1点运行):
0 1 * * * /home/user/cleanup_js_logs.sh
保存后,cron会自动执行脚本。
cp /path/to/logfile.log /backup/),防止误删;find或rm命令时,可先去掉-exec rm -f {} \;部分,确认匹配的文件无误后再执行删除;/var/log下的文件)需root权限,使用sudo命令;pm2或winston等工具管理JS应用,可直接配置日志轮转(如pm2的max_size、rotate_interval参数,或winston-daily-rotate-file库),减少手动维护成本。