云服务器Linux实例/var/log日志定期清理3个实用招
文章分类:更新公告 /
创建时间:2025-09-13
在云服务器的Linux实例中,/var/log目录像个“日志仓库”——系统运行、服务状态、错误信息都会在这里留下记录。可随着时间推移,这些文件越堆越多,轻则占满磁盘影响应用运行,重则导致系统崩溃。今天分享3个亲测有效的定期清理方法,帮你轻松搞定日志管理。
方法一:用logrotate做专业轮转
手动删日志太麻烦?漏删重要文件更头疼?Linux自带的logrotate工具堪称“日志管家”。它能按天/周/月自动切割日志,还能压缩旧文件、控制保留数量,比手动操作更安全稳定。
具体怎么用?logrotate的主配置在/etc/logrotate.conf,自定义规则放/etc/logrotate.d目录。比如要管理/var/log/messages(系统主日志),可在/etc/logrotate.d下新建messages文件,内容参考:
/var/log/messages {
daily # 每天轮转一次
rotate 5 # 保留最近5个旧日志
compress # 压缩旧日志省空间
missingok # 日志不存在时不报错
notifempty # 空文件不轮转
create 640 root root # 轮转后创建新文件,权限640,属主root
postrotate # 轮转后执行的命令
/bin/kill -HUP $(cat /var/run/syslogd.pid 2>/dev/null) 2>/dev/null || true
endscript # 重新加载syslog服务,确保日志继续写入新文件
}
配置后别忘验证:执行`logrotate -f /etc/logrotate.d/messages`强制运行一次,检查/var/log下是否生成带日期的旧日志文件。
方法二:crontab定时跑自定义脚本
logrotate虽好,但遇到要删特定格式、特定路径的日志(比如应用自己生成的access.log),可能不够灵活。这时候用crontab配合脚本更顺手。
先写清理脚本,比如在/home/user下建clean_log.sh:
#!/bin/bash
删/var/log下7天前的.log文件,-mtime +7表示修改时间超过7天
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
可选:记录清理过程到自定义日志,方便排查
echo "$(date) 清理/var/log日志完成" >> /var/log/clean_log_history.log
保存后给脚本执行权限:`chmod +x /home/user/clean_log.sh`。
接着用`crontab -e`添加定时任务,比如每天凌晨2点执行:
0 2 * * * /bin/bash /home/user/clean_log.sh
这里有个小技巧:可以把常用的清理规则写成多个脚本(比如分别处理nginx、mysql日志),再通过crontab统一管理,避免一个脚本太复杂。
方法三:systemd-timer更精准控时
crontab的时间精度是分钟级,且系统重启可能漏任务。如果需要更精确(比如按小时/分钟执行)或确保任务必达,推荐用systemd-timer。
步骤分三步:
1. 建服务文件/etc/systemd/system/clean-log.service,定义要执行的操作:
[Unit]
Description=清理/var/log目录日志
[Service]
Type=oneshot # 一次性任务
ExecStart=/bin/bash /home/user/clean_log.sh # 执行之前写的脚本
2. 建timer文件/etc/systemd/system/clean-log.timer,设定触发时间:
[Unit]
Description=每日运行clean-log服务
[Timer]
OnCalendar=daily # 每天执行(也支持更细粒度,如OnCalendar=*-*-* 02:00:00)
Persistent=true # 系统关机时错过的任务,开机后补执行
AccuracySec=1min # 执行精度控制在1分钟内
[Install]
WantedBy=timers.target # 加入timer目标组
3. 启动并启用timer:
systemctl daemon-reload # 重载配置
systemctl start clean-log.timer # 立即启动
systemctl enable clean-log.timer # 开机自启
想查看任务状态?执行`systemctl list-timers`,能看到下一次执行时间和上次运行结果。
这三种方法各有侧重:logrotate适合系统级日志的规范管理,crontab胜在灵活自定义,systemd-timer则适合需要高精度和可靠性的场景。根据云服务器上的业务需求选对方法,既能释放磁盘空间,又能避免误删重要日志,让系统始终保持“轻装上阵”的状态。