nohup 本身没有“日志大小限制”参数,它只是把标准输出/错误重定向到文件(默认 nohup.out)。
要控制日志大小,需要借助其他机制。下面按常见场景给你几种可行方案,从简单到规范。
logrotate 管理 nohup 日志(推荐 ✅)这是生产环境最推荐的方式。
nohup java -jar app.jar > app.log 2>&1 &
创建配置文件:
sudo vim /etc/logrotate.d/app
内容示例:
/path/to/app.log {
size 100M # 日志超过 100M 就轮转
rotate 5 # 保留 5 个备份
missingok
notifempty
copytruncate # 不重启进程,直接截断原文件
compress
}
logrotate -f /etc/logrotate.d/app
✅ 优点
truncate + cronnohup java -jar app.jar >> app.log 2>&1 &
定时任务:
0 3 * * * truncate -s 0 /path/to/app.log
⚠️ 风险:可能截断正在写入的数据
split 限制单个日志大小(适合日志分析)nohup java -jar app.jar | split -b 100M - app.log.
生成:
app.log.aa
app.log.ab
app.log.ac
❌ 缺点:
如果你的程序是 Java / Python / Node,建议直接配置日志框架。
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>app.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>5</maxHistory>
</rollingPolicy>
然后:
nohup java -jar app.jar > /dev/null 2>&1 &
✅ 这是最佳实践
nohup ./app > app.log 2>&1 &
然后配合 logrotate 管理 app.log
| 方案 | 是否推荐 | 说明 |
|---|---|---|
| logrotate | ✅✅✅ | 生产环境首选 |
| 程序日志框架 | ✅✅✅ | 最优雅 |
| split | ⚠️ | 仅临时 |
| truncate | ❌ | 有风险 |
| nohup 自带 | ❌ | 不支持 |
如果你愿意,可以告诉我:
我可以帮你给出最合适的配置方案。