Linux nohup 日志清理策略
总体原则
策略一览与适用场景
| 策略 | 核心做法 | 适用场景 | 优点 | 注意点 |
|---|---|---|---|---|
| 重定向到指定日志文件 | 将 stdout/stderr 重定向到固定路径文件 | 所有长期运行任务 | 简单可控、便于后续管理 | 仍需配合轮转或清理策略 |
| logrotate 按时间/大小轮转 | /etc/logrotate.d/ 配置 daily/size、rotate、compress、create | 生产环境、规范化运维 | 系统自带、稳定可靠、可压缩与保留策略完善 | 需确保 logrotate 定时任务已启用 |
| 脚本切割 + 清理(split/find/tar) | 按大小切割 nohup.out,归档压缩,删除 N 天前旧文件 | 无法使用 logrotate 或需自定义保留策略 | 灵活可编排、可按天/大小切分 | 需自行维护脚本与定时任务 |
| 按大小阈值重命名归档 | 超阈值 mv 归档并重建空文件 | 简单场景、快速止损 | 实现简单 | 可能产生大量小文件,需配合清理 |
| 输出到 syslog 或 logger | 将输出送入系统日志,由 syslog/rsyslog 管理 | 集中日志管理、统一采集 | 便于集中化与后续分析 | 需应用/脚本支持写入 syslog |
| 定时清空或删除 | 用 cron 定时清空/删除 nohup.out | 临时释放空间、非关键日志 | 快速见效 | 可能丢日志,建议先轮转或备份 |
关键配置示例
使用 logrotate 按大小轮转
/var/log/myapp/nohup.log {
size 100M
rotate 5
compress
missingok
notifempty
create 0640 app app
}
使用脚本按大小切割并归档压缩
LOG=/var/log/myapp/nohup.out
MAX=10485760 # 10MB
DIR=/var/log/myapp/nohup_parts
DATE=$(date +%F)
[ ! -d "$DIR" ] && mkdir -p "$DIR"
if [ -f "$LOG" ] && [ $(stat -c%s "$LOG") -gt $MAX ]; then
split -b 10M -d -a 4 "$LOG" "$DIR/nohup-${DATE}-"
gzip "$DIR"/nohup-${DATE}-*
cat /dev/null > "$LOG"
fi
find "$DIR" -type f -mtime +7 -delete
运维建议