nohup 本身不能直接设置日志大小,它只是把标准输出/错误重定向到文件。要控制日志大小,需要配合其他机制。下面按常见场景给你几种实用方案。
nohup java -jar app.jar > app.log 2>&1 &
app.loglogrotate(最推荐,生产环境)这是 Linux 下最标准、最安全 的方式。
sudo vim /etc/logrotate.d/app
示例:
/path/to/app.log {
size 100M # 达到 100M 就切分
rotate 5 # 最多保留 5 个
copytruncate # 不重启进程,直接截断
missingok
notifempty
}
logrotate -f /etc/logrotate.d/app
✅ 优点
cronolog(按大小或时间切分)nohup java -jar app.jar | cronolog /path/app.%Y%m%d.log &
⚠️ 但 cronolog 对“按大小切分”支持不好,不如 logrotate。
rotatelogs(Apache 工具)nohup java -jar app.jar | rotatelogs /path/app.log 100M &
✅ 支持按大小切分
❌ 不是所有系统默认安装
nohup java -jar app.jar > app.log 2>&1 &
然后定期:
: > app.log
❌ 会丢日志
❌ 不适合生产
如果是 Java / Python / Go 等程序:
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>app.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>5</maxHistory>
</rollingPolicy>
✅ 最干净
✅ 不依赖系统
| 方案 | 是否推荐 | 是否自动 | 适合场景 |
|---|---|---|---|
| logrotate | ⭐⭐⭐⭐⭐ | ✅ | 生产环境 |
| 程序日志框架 | ⭐⭐⭐⭐⭐ | ✅ | Java / Python |
| rotatelogs | ⭐⭐⭐ | ✅ | 简单脚本 |
| cronolog | ⭐⭐ | ❌ | 老系统 |
| 手动 truncate | ❌ | ❌ | 临时应急 |
nohup 只管启动,日志大小交给 logrotate 或程序日志框架。
如果你愿意,可以告诉我:
我可以帮你写一份完全可复制的配置。