nohup 命令默认会把输出写到 nohup.out,时间久了会非常大。下面给你几种常用、可定时清理的方案,从简单到规范。
✅ 推荐做法
: > nohup.out
# 或
truncate -s 0 nohup.out
nohup java -jar app.jar > app.log 2>&1 &
nohup java -jar app.jar >> app-$(date +%Y%m%d).log 2>&1 &
sudo vim /etc/logrotate.d/nohup
/path/to/nohup.out {
daily
rotate 7
size 100M
missingok
notifempty
copytruncate
}
| 参数 | 作用 |
|---|---|
| daily | 每天轮转 |
| rotate 7 | 保留 7 份 |
| size 100M | 超过 100M 才轮转 |
| copytruncate | 不中断程序 |
| missingok | 文件不存在也不报错 |
✅ 不需要重启程序
crontab -e
0 3 * * * truncate -s 0 /path/to/nohup.out
⚠️ 缺点:日志会丢失
nohup ./app > /dev/null 2>&1 &
或只保留错误日志:
nohup ./app > /dev/null 2>>err.log &
| 场景 | 推荐方案 |
|---|---|
| 临时脚本 | : > nohup.out |
| 生产服务 | logrotate ✅ |
| 简单定时 | crontab + truncate |
| 长期运行 | 重定向日志 + 滚动 |
如果你愿意,可以告诉我:
我可以帮你写一份完全适合你环境的清理方案。