Linux 14.04服务器Error.log手动及自动清空方案咨询
搞定快速增长的Error.log:手动清空+自动截断全方案
嘿,针对你Ubuntu 14.04服务器上那个疯长的Error.log,我给你整理了两种场景的解决方案——手动清空的正确姿势,还有自动在2GB时触发清空的靠谱方法,都是实际运维里常用的操作:
一、手动清空/删除日志的正确打开方式
先提醒一句:直接rm删文件很容易踩坑!如果进程还在往这个文件写数据,删了之后磁盘空间不会释放,因为进程还拿着文件句柄。所以优先选清空,而不是直接删除:
方法1:最简清空法——重定向覆盖
用空内容直接覆盖日志,完全不影响进程继续写入:
sudo > /home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log
嫌太简洁的话,也可以写得更明确:
sudo echo "" > /home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log
方法2:精准截断——用truncate命令
这个命令可以精准把文件大小砍到0,效果和上面一样,但更“专业”:
sudo truncate -s 0 /home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log
非要删除文件?得这么做
如果你确实要删掉这个文件,删完必须重启写入日志的服务,不然进程会继续往“已删除”的文件里写,磁盘空间照样被占着:
sudo rm /home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log # 把下面的your-service-name换成实际服务名,比如nginx、tomcat之类的 sudo service your-service-name restart
二、自动实现2GB触发清空的方案
推荐两种方法,优先用系统自带的logrotate,这是Linux专门管日志的工具,稳定省心;如果不想用这个,也可以自己写脚本配合定时任务。
方案1:用logrotate(强烈推荐)
logrotate是系统默认的日志管理工具,轮转、压缩、截断日志都能搞定,配置一次就不用管了:
- 先创建一个自定义的配置文件:
sudo nano /etc/logrotate.d/lptv-error-log
- 把下面的配置粘进去,参数我都给你注释清楚了:
/home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log { size 2G # 当文件涨到2GB时触发操作 copytruncate # 先复制一份日志再清空原文件,完全不中断进程写入(核心参数!) rotate 3 # 保留3份历史日志,怕占空间可以改小 compress # 把历史日志压缩,省磁盘空间(可选,不想压缩就删掉这行) missingok # 如果日志文件突然没了,不报错 notifempty # 日志为空的话,不执行轮转 }
- 测试一下配置有没有问题:
手动触发一次logrotate看看效果:
sudo logrotate -v /etc/logrotate.d/lptv-error-log
没报错就说明配置没问题。logrotate默认每天会自动执行一次(通过系统的cron.daily),之后它会自动检查文件大小,到2GB就自动处理。
方案2:自定义脚本+定时任务
如果不想用logrotate,自己写个脚本定时检查文件大小也可以:
- 先写脚本文件:
nano /home/xtr3amcod3s/clear_error_log.sh
- 把下面的内容粘进去,逻辑很简单:检查文件大小,超过2GB就清空,还会记录操作日志:
#!/bin/bash LOG_FILE="/home/xtr3amcod3s/lptv_xtr3am_cod3s/logs/Error.log" MAX_SIZE=$((2*1024*1024*1024)) # 把2GB转换成字节数 # 先检查文件存在不 if [ -f "$LOG_FILE" ]; then FILE_SIZE=$(stat -c %s "$LOG_FILE") # 对比大小,超过就清空 if [ "$FILE_SIZE" -gt "$MAX_SIZE" ]; then echo "[$(date)] 清空Error.log,当前大小:$FILE_SIZE 字节" >> /var/log/clear_error_log_history.log truncate -s 0 "$LOG_FILE" fi else echo "[$(date)] 日志文件找不到:$LOG_FILE" >> /var/log/clear_error_log_history.log fi
- 给脚本加执行权限:
chmod +x /home/xtr3amcod3s/clear_error_log.sh
- 设置定时任务,让脚本定期检查:
编辑crontab:
crontab -e
添加一行,比如每小时检查一次:
0 * * * * /home/xtr3amcod3s/clear_error_log.sh
要是想查得更勤,比如每10分钟一次,就改成:
*/10 * * * * /home/xtr3amcod3s/clear_error_log.sh
最后提个醒
- 不管用哪种自动方案,都要确保操作日志的权限没问题,比如用sudo或者调整文件所属组
- 日志疯长肯定有原因,有空最好看看日志内容,排查下是不是服务有报错或者冗余日志输出,从根源解决才是长久之计
内容的提问来源于stack exchange,提问作者S X




