温馨提示×

nohup日志不输出为什么

小樊
38
2026-10-06 10:45:37
栏目: 编程语言

nohup 日志不输出,常见原因和对应排查方法如下:


一、最常见原因

1️⃣ 输出被缓冲(最常见)

程序(尤其是 Python、Java、C++)标准输出是有缓冲的,不会立刻写文件。

现象

  • nohup xxx > out.log 2>&1 &
  • out.log 一开始是空的
  • 程序跑很久后才有内容

解决

  • Python:
    python -u app.py > out.log 2>&1 &
    
  • 或加环境变量:
    PYTHONUNBUFFERED=1 nohup python app.py > out.log 2>&1 &
    
  • C/C++:使用 fflush 或 setvbuf
  • Java:
    java -Djava.util.logging.SimpleFormatter.buffer=false ...
    

2️⃣ 日志根本没写到 stdout/stderr

程序把日志写到了:

  • 自己的日志文件
  • syslog
  • 其他 fd

排查

ls -l /proc/<pid>/fd

看 1(stdout)、2(stderr)指向哪


3️⃣ 重定向写错了

错误示例:

nohup python app.py & > out.log

> 在 & 后面,没生效

✅ 正确:

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

4️⃣ 没真正用 nohup 的日志

nohup 默认只保证不挂断,日志位置取决于你:

  • 没重定向 → 默认 nohup.out
  • 当前目录无权限 → 写 ~

检查:

ls -l nohup.out
ls -l ~/nohup.out

5️⃣ 程序立刻退出

程序启动失败,日志自然没内容

检查

jobs
ps -ef | grep xxx

6️⃣ 文件权限问题

  • 目录不可写
  • 磁盘满
df -h
touch out.log

二、推荐的安全写法 ✅

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

或:

setsid python -u app.py > app.log 2>&1 < /dev/null &

三、调试技巧

实时看日志:

tail -f app.log

如果你愿意,可以把你的启动命令 + 程序语言贴出来,我可以直接帮你定位是哪一条原因。

0 踩