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
库),减少手动维护成本。