在 Linux 中,nohup 通常配合 > logfile 2>&1 & 或 nohup command > logfile 2>&1 & 使用,日志文件会不断增大。清理 nohup 日志常用下面几种方式:
不要直接 rm 正在被进程写入的日志文件,否则:
✅ 正确做法:清空内容,保留文件
# 方式1(最常用)
> nohup.out
# 方式2
cat /dev/null > nohup.out
# 方式3
truncate -s 0 nohup.out
这三种都不会中断程序运行。
查看进程是否仍占用文件:
lsof | grep nohup.out
释放空间(不能恢复内容):
# 找到 pid
ls -l /proc/<pid>/fd
# 清空对应 fd
> /proc/<pid>/fd/<fd号>
logrotate(推荐生产环境)示例 /etc/logrotate.d/myapp:
/path/to/nohup.out {
size 100M
rotate 5
compress
missingok
notifempty
copytruncate
}
⚠️ 关键参数:
copytruncate:拷贝后截断,不中断进程copytruncate 可能需要重启程序手动触发:
logrotate -f /etc/logrotate.d/myapp
nohup your_command > /dev/null 2>&1 &
nohup your_command >> app_$(date +%Y%m%d).log 2>&1 &
0 3 * * * truncate -s 0 /path/to/nohup.out
| 场景 | 建议 |
|---|---|
| 临时清理 | > nohup.out |
| 生产环境 | logrotate + copytruncate |
| 不想写日志 | 重定向到 /dev/null |
| 已误删 | lsof + /proc 清空 fd |
如果你愿意,可以告诉我:
我可以给你更精确的方案。