TOP云提供高性价比云服务器租用,有中国内地/港澳台、海外等全球各地节点,TOP云国内云服务器只要有域名备案号就能直接用,无须重复备案;港澳台及海外云服务器不用备案,购买之后直接使用,省时省力省心。价格实惠,续费同价,2核2G5M仅需27元每月,8核8G50M仅需66元每月,更多配置套餐请进入下面网址了解:
TOP云总站云服务器:https://topyun.vip/server/buy.html
TOP云C站云服务器:https://c.topyun.vip/cart
日志轮转:将旧的日志文件重命名(如 app.log → app.log.1),并创建新的日志文件。
压缩日志:对旧的日志文件进行压缩(如 app.log.1.gz),节省磁盘空间。
删除旧日志:保留指定数量的日志文件,删除过期的日志。
邮件通知:可选地将日志发送到指定邮箱(需配置邮件服务)。
主配置文件:/etc/logrotate.conf
定义全局默认配置(如日志保留策略、压缩选项等)。
应用配置文件:/etc/logrotate.d/ 目录下的文件
为特定应用或服务(如 Nginx、MySQL)单独配置日志轮转规则。
访问日志:/var/log/nginx/access.log
错误日志:/var/log/nginx/error.log
在云服务器中,日志文件会随着时间的推移不断增长,如果不加以管理,可能会占满磁盘空间,影响系统稳定性。Logrotate 是 Linux 系统自带的一个日志管理工具,可以自动对日志文件进行轮转(切割)、压缩、删除和邮件通知,从而有效管理日志文件。
以下是详细的配置方法:
一、Logrotate 简介
Logrotate 是 Linux 系统自带的日志管理工具,主要功能包括:
Logrotate 通常由 cron 定时任务调用,默认每天执行一次。
二、Logrotate 基本配置
Logrotate 的配置文件分为主配置文件和应用配置文件:
三、配置 Logrotate 轮转日志(以 Nginx 为例)
1. 确认 Nginx 日志路径
Nginx 的默认日志路径通常为:
2. 创建 Nginx 的 Logrotate 配置文件
在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 nginx:
sudo vim /etc/logrotate.d/nginx
3. 配置内容示例
以下是一个典型的 Nginx 日志轮转配置:
/var/log/nginx/*.log {
daily # 每天轮转一次日志
missingok # 如果日志文件不存在,不报错
rotate 14 # 保留最近 14 个日志文件
compress # 压缩旧日志文件(使用 gzip)
delaycompress # 延迟压缩,即不压缩最新的一个旧日志文件(如 app.log.1 不压缩,app.log.2.gz 压缩)
notifempty # 如果日志文件为空,不轮转
create 0640 www-data adm # 创建新日志文件时设置权限和所有者(根据实际用户调整)
sharedscripts # 所有日志处理完成后执行脚本(避免重复执行)
postrotate # 轮转后执行的命令
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid` # 通知 Nginx 重新打开日志文件
fi
endscript
}
配置项说明:
配置项 | 说明 |
---|---|
daily | 每天轮转一次日志(可选:weekly、monthly 或指定具体时间)。 |
missingok | 如果日志文件不存在,不报错。 |
rotate 14 | 保留最近 14 个日志文件(超过的会被删除)。 |
compress | 使用 gzip 压缩旧日志文件(如 app.log.1.gz)。 |
delaycompress | 延迟压缩,即不压缩最新的一个旧日志文件(如 app.log.1 不压缩,app.log.2.gz 压缩)。 |
notifempty | 如果日志文件为空,不轮转。 |
create 0640 www-data adm | 创建新日志文件时设置权限(0640)和所有者(www-data 用户和 adm 组,根据实际调整)。 |
sharedscripts | 所有日志处理完成后执行脚本(避免重复执行)。 |
postrotate | 轮转后执行的命令(如通知 Nginx 重新打开日志文件)。 |
4. 测试 Logrotate 配置是否正确
在正式启用之前,可以先手动测试配置是否正确:
sudo logrotate -d /etc/logrotate.d/nginx # 调试模式(不实际执行)
sudo logrotate -vf /etc/logrotate.d/nginx # 强制运行并显示详细输出
-d:调试模式,只打印操作而不实际执行。
-v:显示详细输出。
-f:强制运行(即使未到轮转时间)。
5. 手动触发 Logrotate(可选)
如果需要立即轮转日志(而不等待 cron 定时任务),可以手动运行:
sudo logrotate -vf /etc/logrotate.d/nginx
四、Logrotate 的定时任务
Logrotate 默认由 cron 定时任务调用,配置文件通常位于:
/etc/cron.daily/logrotate
该脚本会每天调用一次 Logrotate,读取 /etc/logrotate.conf 和 /etc/logrotate.d/ 下的配置文件。
如果需要更频繁的轮转(如每小时),可以自定义 cron 任务:
sudo crontab -e
添加以下内容(每小时运行一次):
0 * * * * /usr/sbin/logrotate /etc/logrotate.conf
五、其他常见服务的 Logrotate 配置示例
1. MySQL 日志轮转
MySQL 的日志文件通常包括:
错误日志:/var/log/mysql/error.log
慢查询日志:/var/log/mysql/mysql-slow.log
配置文件示例(/etc/logrotate.d/mysql):
/var/log/mysql/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 mysql adm sharedscripts postrotate if [ -f /var/run/mysqld/mysqld.pid ]; then kill -USR1 `cat /var/run/mysqld/mysqld.pid` fi endscript }
2. 系统日志轮转(如 /var/log/syslog)
系统日志通常由 rsyslog 或 syslog-ng 管理,Logrotate 的默认配置文件为 /etc/logrotate.d/rsyslog,内容如下:
/var/log/syslog { daily missingok rotate 7 compress delaycompress notifempty create 640 syslog adm sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
六、注意事项
权限问题:
确保 Logrotate 创建的新日志文件具有正确的权限和所有者(如 Nginx 需要 www-data 用户写入权限)。
如果日志文件属于特定用户(如 MySQL),需在 create 选项中指定正确的用户和组。
磁盘空间监控:
即使配置了 Logrotate,仍需定期检查磁盘空间,避免日志文件异常增长。
日志备份:
如果需要长期保存日志,可以将压缩后的日志文件(如 app.log.1.gz)备份到其他存储(如对象存储、NAS 等)。
调试 Logrotate:
如果日志未轮转,可以使用 -d 或 -v 参数调试配置。
七、总结
Logrotate 是 Linux 系统管理日志的核心工具,通过合理配置可以:
自动切割日志文件,避免单个日志文件过大。
压缩旧日志,节省磁盘空间。
删除过期日志,防止磁盘占满。
通知服务重新打开日志文件,确保服务正常运行。