温馨提示×

Linux nohup日志清理策略是什么

小樊
44
2025-12-21 20:07:59
栏目: 智能运维

Linux nohup 日志清理策略

总体原则

  • nohup 本身不提供日志大小限制或自动轮转,需要借助外部机制(重定向、logrotate、脚本切割、系统日志等)来治理日志增长与清理。
  • 建议始终显式重定向输出(如:nohup your_cmd > app.log 2>&1 &),避免默认写入当前目录的 nohup.out 且难以管理。

策略一览与适用场景

策略 核心做法 适用场景 优点 注意点
重定向到指定日志文件 将 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 按大小轮转

    • 新建配置:/etc/logrotate.d/nohup
    • 示例:
      /var/log/myapp/nohup.log {
          size 100M
          rotate 5
          compress
          missingok
          notifempty
          create 0640 app app
      }
      
    • 说明:当日志达到 100MB 触发轮转,最多保留 5 个压缩旧日志;如系统未启用每日 cron,可补充定时执行:0 * * * * /usr/sbin/logrotate /etc/logrotate.d/nohup。
  • 使用脚本按大小切割并归档压缩

    • 思路:当 nohup.out 超过阈值时,按 10MB 切块,归档到 dated 目录,压缩保存 7 天,随后清空当前日志继续写入。
    • 示例脚本要点:
      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
      
    • 通过 cron 定时执行(如每日/每小时)即可持续治理。

运维建议

  • 优先选择 logrotate 作为统一方案;若使用脚本方案,务必保证脚本幂等、具备日志级别与保留天数可配置、并做好执行日志与告警。
  • 对关键业务,切割/轮转前先归档压缩,避免直接删除;清理策略建议至少保留 7–30 天,并纳入备份窗口。
  • 统一日志目录与权限(如 0640 app app),便于审计与集中采集;对高并发输出,避免频繁打开/关闭文件造成的性能抖动。

0