在 Linux 中,nohup 本身没有参数可以直接限制日志文件大小。日志文件(默认是 nohup.out)会一直增长,直到磁盘被写满。
要限制 nohup 日志大小,常见做法有以下几种(按推荐程度排序):
logrotate(最推荐)思路:
把 nohup 的输出重定向到指定文件,然后用 logrotate 定期轮转、压缩、限制大小。
nohup your_command > app.log 2>&1 &
创建配置文件:
sudo vim /etc/logrotate.d/app
示例配置:
/path/to/app.log {
size 100M
rotate 5
compress
missingok
notifempty
copytruncate
}
含义:
size 100M:日志超过 100M 就轮转rotate 5:最多保留 5 个compress:压缩旧日志copytruncate:不重启进程直接截断日志(适合 nohup)✅ 生产环境首选方案
cronolog 按时间/大小切分(较老但实用)nohup your_command | cronolog "app-%Y%m%d.log" &
或按大小(需配合脚本):
nohup your_command | cronolog "app-%Y%m%d-%H%M.log" &
⚠️ 需要安装 cronolog
nohup your_command > app.log 2>&1 &
: > app.log
或写个定时任务:
0 3 * * * cat /dev/null > /path/to/app.log
⚠️ 会丢失日志,不适合生产
如果程序是你自己写的(Java / Python / Go 等):
✅ 这是最干净、最可控的方式
nohup command > /dev/null 2>&1 &
虽然不会增长日志,但完全丢失输出,排查问题困难。
| 方法 | 是否推荐 | 说明 |
|---|---|---|
| logrotate | ✅✅✅ | 最标准、最稳定 |
| cronolog | ✅✅ | 适合老系统 |
| nohup + 手动清空 | ⚠️ | 临时方案 |
| 程序内日志控制 | ✅✅✅ | 最佳方案 |
| /dev/null | ❌ | 不建议 |
如果你愿意,可以告诉我:
我可以帮你写一份可直接用的完整配置。