温馨提示×

nohup日志不显示怎么办

小樊
41
2026-08-19 10:55:07
栏目: 编程语言

nohup 日志不显示,通常是因为输出没写到你以为的文件里,或者程序还没真正输出。下面按常见原因给你排查思路(Linux 环境)。


一、最常见原因

1️⃣ 输出被重定向到了别的地方

很多人以为 nohup 默认一定写 nohup.out,其实不一定

常见错误写法

nohup python app.py

但你在代码里用了:

print("xxx", flush=False)

或者日志框架把日志写到了别的地方。

建议显式重定向

nohup python app.py > app.log 2>&1 &

2️⃣ 标准输出被缓冲,还没刷到文件

这是最容易被忽略的!

现象

  • 程序在跑
  • 文件存在但一直是 0 字节
  • tail -f 看不到内容

原因

  • Python / Java / C++ 等默认有输出缓冲
  • 程序没退出就不会写文件

解决办法

Python

nohup python -u app.py > app.log 2>&1 &

或代码里:

print("xxx", flush=True)

Java

nohup java -jar app.jar > app.log 2>&1 &

或加:

-Djava.util.logging.config.file=logging.properties

3️⃣ 输出被写到了 stderr,但你只看了 stdout

nohup python app.py > nohup.out &

❌ 这样 stderr 不会进 nohup.out

✅ 正确写法

nohup python app.py > nohup.out 2>&1 &

二、确认日志到底在哪

1️⃣ 查看进程输出文件

lsof -p <PID> | grep -E 'txt|log|out'

2️⃣ 查看进程 FD

ls -l /proc/<PID>/fd

常见:

  • 1 → stdout
  • 2 → stderr

三、nohup.out 不生成的原因

✅ 默认行为

nohup command &
  • 当前目录可写 → nohup.out
  • 当前目录不可写 → $HOME/nohup.out

❌ 不生成情况

  • 输出被重定向
  • 程序没往 stdout/stderr 写
  • 程序还没 flush

四、推荐的标准用法 ✅

✅ 最稳妥写法

nohup ./your_program > run.log 2>&1 &

✅ 查看实时日志

tail -f run.log

五、如果你想“立刻看到日志”

方案 1:关闭缓冲

nohup python -u app.py > app.log 2>&1 &

方案 2:用 stdbuf

nohup stdbuf -oL -eL ./app > app.log 2>&1 &

六、快速自检清单 ✅

  • [ ] 是否显式重定向了 stdout & stderr?
  • [ ] 程序是否真的有输出?
  • [ ] 是否是缓冲问题?
  • [ ] 是否写到了别的目录?
  • [ ] 是否用了日志框架(log4j / logging)?

如果你愿意,可以把:

  • 启动命令
  • 程序语言
  • tail -f 时的情况

贴出来,我可以直接帮你定位是哪一条原因。

0