nohup 默认会把标准输出和标准错误都追加写到 nohup.out,所以日志会一直变大。常见解决办法如下,按推荐程度排序:
✅ 最推荐:重定向日志(可控制大小)
1️⃣ 启动时重定向到指定文件
nohup java -jar app.jar > app.log 2>&1 &
2️⃣ 按日期切分(常用)
nohup java -jar app.jar > app_$(date +%Y%m%d).log 2>&1 &
✅ 自动按大小切分(推荐生产环境)
使用 logrotate(最规范)
示例 /etc/logrotate.d/app:
/path/app.log {
daily
rotate 7
size 100M
missingok
notifempty
copytruncate
}
✅ 优点:
- 自动切分
- 不中断程序
- 可保留历史日志
✅ 不想保留日志(不推荐但可用)
直接丢弃日志
nohup java -jar app.jar > /dev/null 2>&1 &
⚠️ 出问题无法排查
✅ 使用 systemd(现代服务器推荐)
[Service]
StandardOutput=append:/var/log/app.log
StandardError=append:/var/log/app.log
配合 logrotate 管理
✅ 已运行的 nohup.out 怎么处理?
❌ 不要直接 rm nohup.out
会导致磁盘空间不释放
✅ 正确做法
: > nohup.out
# 或
truncate -s 0 nohup.out
✅ 总结建议
| 场景 | 建议 |
|---|---|
| 临时测试 | > /dev/null |
| 普通服务 | 重定向 + logrotate |
| 生产环境 | systemd + logrotate |
| 已运行程序 | truncate 清理 |
如果你愿意,可以把**启动命令或运行环境(Java / Python / Node)**发我,我可以给你一个最合适的配置方案。