温馨提示×

linux nohup日志如何清理

小樊
38
2026-10-21 01:07:02
栏目: 智能运维

在 Linux 中,nohup 通常配合 > logfile 2>&1 & 或 nohup command > logfile 2>&1 & 使用,日志文件会不断增大。清理 nohup 日志常用下面几种方式:


一、安全清空日志(推荐)

不要直接 rm 正在被进程写入的日志文件,否则:

  • 文件删了但磁盘空间不释放
  • 进程仍写入原 inode,日志“消失但还在占空间”

✅ 正确做法:清空内容,保留文件

# 方式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号>

三、日志轮转(长期方案)

1️⃣ 使用 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

四、启动时直接避免大日志

1️⃣ 不写 nohup.out

nohup your_command > /dev/null 2>&1 &

2️⃣ 按日期生成日志

nohup your_command >> app_$(date +%Y%m%d).log 2>&1 &

五、定时清理(crontab)

0 3 * * * truncate -s 0 /path/to/nohup.out

总结建议

场景 建议
临时清理 > nohup.out
生产环境 logrotate + copytruncate
不想写日志 重定向到 /dev/null
已误删 lsof + /proc 清空 fd

如果你愿意,可以告诉我:

  • 是 nohup.out 还是自定义日志?
  • 单机还是服务器集群?
  • Java / Python / 其他程序?

我可以给你更精确的方案。

0 踩