温馨提示×

nohup日志丢失怎么找回

小樊
53
2026-09-09 12:34:50
栏目: 编程语言

“nohup 日志丢失”通常指的是用 nohup command > logfile 2>&1 & 启动的程序,日志文件没了、被截断、被覆盖或内容看不到。能否找回,取决于日志是怎么丢的。下面按常见场景说明:


一、日志文件被删除,但进程还在运行(最常见,有机会找回)

如果你删除了 log 文件,但程序没停,Linux 里文件其实还在,只是目录项没了。

查找被删除但仍被占用的文件

lsof | grep deleted

lsof +L1

找到类似:

java  12345  user  1w  REG  ...  /home/user/nohup.out (deleted)

从 /proc 恢复

假设 PID 是 12345,文件描述符是 1

cp /proc/12345/fd/1 recovered.log

这是最有可能完整找回日志的方式


二、日志被 > logfile 覆盖(重定向清空)

例如你又执行了:

nohup xxx > nohup.out 2>&1 &

原内容被清空。

能否找回?

  • ❌ 已覆盖:基本无法恢复
  • ✅ 若进程未重启且 fd 仍指向旧 inode(少见):可用 lsof

三、日志被 logrotate 截断或轮转

常见配置会:

  • 清空原文件
  • 或 rename 后新建文件

检查旧日志

ls -lh nohup.out*

可能有:

nohup.out.1
nohup.out.1.gz

如果是 .gz

zcat nohup.out.1.gz

四、程序自己重定向到其他地方

有些程序:

  • 忽略 nohup 输出
  • 自己写日志(如 log4j、spring)

检查

ls -l /proc/<pid>/fd

看真正的输出去哪了。


五、磁盘满了 / 权限问题导致写不进

日志“看起来丢了”,其实没写。

检查

df -h
ls -l logfile

六、防止以后再丢(重要)

✅ 正确写法

nohup command >> app.log 2>&1 &

(用 >> 追加,不用 >

✅ 用 logrotate

/var/log/app.log {
    daily
    rotate 7
    compress
    copytruncate
}

✅ 或改用 systemd / supervisor


总结一句话

进程还在 + 文件被删 = 大概率能找回(/proc/PID/fd
已覆盖 / 磁盘损坏 = 基本找不回

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

  • 日志是怎么丢的(删了?覆盖?重启?)
  • 操作系统
  • 是否进程还在

我可以给你更精确的命令。

0