答案:通过Shell脚本监控内存使用率,超过阈值时切割日志。脚本检查内存 usage,若超设定值且日志存在,则移动归档并记录操作,结合cron定期执行,需注意权限、服务兼容性及保留策略。

Linux系统中日志文件会随着时间不断增长,占用大量磁盘空间甚至影响系统性能。虽然logrotate是常用的日志切割工具,但有时需要根据特定条件(如内存使用率)进行自定义切割。下面介绍如何通过自定义Shell脚本实现按内存使用情况对日志进行切割。
核心思路是编写一个定时运行的Shell脚本,实时检查系统内存使用率,当超过设定阈值时,自动对指定日志文件进行切割归档。
以下是一个实用示例脚本:
#!/bin/bash
<h1>配置参数</h1><p>LOG_FILE="/var/log/app.log"
MAX_MEMORY_USAGE=80 # 内存使用率阈值(百分比)
ARCHIVE_DIR="/var/log/archive"
CURRENT<em>DATE=$(date +"%Y%m%d</em>%H%M%S")</p><h1>创建归档目录</h1><p>[ ! -d "$ARCHIVE_DIR" ] && mkdir -p "$ARCHIVE_DIR"</p><h1>获取当前内存使用率(去掉%符号)</h1><p>MEMORY_USAGE=$(free | grep Mem | awk '{print ($3/$2) * 100}' | cut -d. -f1)</p><h1>判断是否超过阈值且原日志文件存在且非空</h1><p>if [ $MEMORY_USAGE -gt $MAX_MEMORY_USAGE ] && [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then
mv "$LOG_FILE" "$ARCHIVE_DIR/app.log.$CURRENT_DATE"
echo "日志已切割: $LOG_FILE → $ARCHIVE_DIR/app.log.$CURRENT_DATE (内存使用: ${MEMORY_USAGE}%)"</p><h1>可选:发送通知或记录操作</h1><pre class='brush:php;toolbar:false;'>logger "Log rotated due to high memory usage: ${MEMORY_USAGE}%"fi
为了让脚本能周期性运行,需将其添加到crontab中。
编辑root用户的定时任务:
crontab -e
添加如下行(每5分钟检查一次):
*/5 * * * * /path/to/your/log_rotate_script.sh
确保脚本有可执行权限:
chmod +x /path/to/your/log_rotate_script.sh
实际部署时需考虑以下几个关键点:
基本上就这些。通过结合内存监控与条件判断,你可以灵活控制日志切割时机,尤其适用于资源敏感型环境。不复杂但容易忽略细节,比如磁盘空间、服务兼容性和异常处理。
以上就是Linux日志怎么切割_Linux日志通过自定义脚本按内存使用切割的教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号