要彻底清理 CentOS 系统中的日志文件,可以按照以下步骤进行操作:
在进行任何清理之前,建议先备份重要的日志文件,以防需要恢复。
sudo cp -r /var/log /var/log_backup
CentOS 系统日志通常存储在 /var/log 目录下。可以使用 journalctl 命令来清理旧的日志。
sudo journalctl --rotate
sudo journalctl --vacuum-size=100M
上述命令会将日志文件大小限制在 100MB,并删除旧的日志文件。
如果你只想清理特定服务的日志,可以使用以下命令:
sudo journalctl --vacuum-by-date=2weeks --unit=service_name.service
将 service_name.service 替换为你想要清理日志的服务名称,并将 2weeks 替换为你想要保留的日志天数。
除了系统日志外,还有一些其他目录下的日志文件也需要定期清理。
sudo systemctl stop httpd
sudo rm -rf /var/log/httpd/*
sudo systemctl start httpd
sudo systemctl stop nginx
sudo rm -rf /var/log/nginx/*
sudo systemctl start nginx
sudo systemctl stop mysqld
sudo rm -rf /var/log/mysqld.log*
sudo systemctl start mysqld
为了避免日志文件过大,可以设置日志轮转。CentOS 默认使用 logrotate 工具来管理日志文件的轮转。
编辑 /etc/logrotate.conf 文件或创建一个新的配置文件在 /etc/logrotate.d/ 目录下,例如:
sudo nano /etc/logrotate.d/my_service
添加以下内容:
/var/log/my_service/*.log {
    daily
    missingok
    rotate 7
    compress
    notifempty
    create 640 root adm
}
上述配置表示每天轮转一次日志文件,保留最近 7 天的日志文件,并对旧日志文件进行压缩。
你可以编写一个简单的脚本来定期清理日志文件,并将其添加到 cron 任务中。
创建一个脚本文件:
sudo nano /usr/local/bin/cleanup_logs.sh
添加以下内容:
#!/bin/bash
# 备份日志
sudo cp -r /var/log /var/log_backup_$(date +%Y%m%d%H%M%S)
# 清理系统日志
sudo journalctl --rotate
sudo journalctl --vacuum-size=100M
# 清理特定服务的日志
sudo journalctl --vacuum-by-date=2weeks --unit=httpd.service
sudo journalctl --vacuum-by-date=2weeks --unit=nginx.service
sudo journalctl --vacuum-by-date=2weeks --unit=mysqld.service
# 清理其他日志文件
sudo systemctl stop httpd
sudo rm -rf /var/log/httpd/*
sudo systemctl start httpd
sudo systemctl stop nginx
sudo rm -rf /var/log/nginx/*
sudo systemctl start nginx
sudo systemctl stop mysqld
sudo rm -rf /var/log/mysqld.log*
sudo systemctl start mysqld
赋予脚本执行权限:
sudo chmod +x /usr/local/bin/cleanup_logs.sh
将脚本添加到 cron 任务中:
sudo crontab -e
添加以下行以每天凌晨 2 点执行脚本:
0 2 * * * /usr/local/bin/cleanup_logs.sh
通过以上步骤,你可以有效地清理 CentOS 系统中的日志文件,并确保日志文件不会占用过多的磁盘空间。