温馨提示×

nohup日志如何滚动

小樊
36
2026-07-10 01:32:52
栏目: 编程语言

nohup 本身不会自动做日志滚动(log rotation),日志会一直往 nohup.out 或你重定向的文件里写。要实现滚动,常见做法有以下几种(从简单到规范):


一、最简单:重定向 + 手动/定时清空

1️⃣ 启动时不写 nohup.out

nohup java -jar app.jar > app.log 2>&1 &

2️⃣ 清空日志(不影响进程)

: > app.log
# 或
truncate -s 0 app.log

✅ 适合临时方案
❌ 不会自动滚动


二、使用 logrotate(✅ 推荐,生产环境)

这是 最标准、最安全 的方式。

示例配置

sudo vim /etc/logrotate.d/myapp
/path/to/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

参数说明

参数 作用
daily 每天滚动
rotate 7 保留 7 份
compress 压缩旧日志
missingok 日志不存在不报错
notifempty 空文件不滚动
copytruncate 复制后清空(不重启进程)

✅ 不需要改程序
✅ 适合 nohup / Java / Python 等


三、使用 cronolog(按时间自动切)

安装

yum install cronolog
# 或
apt install cronolog

使用方式

nohup java -jar app.jar | cronolog /path/app.%Y%m%d.log >> /dev/null 2>&1 &

✅ 自动按日期生成日志
❌ 额外依赖


四、自己写脚本 + crontab(不推荐)

mv app.log app.log.$(date +%F)
kill -HUP $(cat app.pid)

⚠️ 很多程序不支持 HUP 重新打开日志文件


五、从根源解决(✅ 更好)

✅ 使用日志框架(推荐)

  • Java:Logback / Log4j2
  • Python:logging + RotatingFileHandler

示例(Logback):

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>app.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>7</maxHistory>
</rollingPolicy>

然后:

nohup java -jar app.jar > /dev/null 2>&1 &

✅ 最干净、最专业


总结建议

场景 推荐方案
临时测试 重定向 + 手动清空
生产环境 logrotate
想按时间切 cronolog
长期维护 ✅ 日志框架

如果你愿意,可以告诉我:

  • 是什么程序(Java / Python / Shell)
  • 日志路径
  • 服务器系统(CentOS / Ubuntu)

我可以帮你直接写一份 可用的 logrotate 配置

0