温馨提示×

为何nohup日志为空

小樊
37
2026-09-15 16:10:22
栏目: 编程语言

nohup 日志为空,通常不是 nohup 本身的问题,而是程序输出方式 / 缓冲 / 重定向的问题。下面按常见原因逐步说明。


一、最常见原因:输出被缓冲了(90% 的情况)

1. 程序输出有缓冲

很多程序(尤其是 Python、C、Java)在非终端输出时会启用全缓冲

  • 终端输出:行缓冲(立刻写)
  • 文件输出:全缓冲(攒够了才写)

结果:

  • 程序还在跑
  • 但日志文件是空的

示例(Python)

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

如果 app.py 没有频繁 flush,log.txt 可能长时间为空。

✅ 解决办法:

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

或代码里:

print("xxx", flush=True)

二、标准输出 / 错误输出没重定向

错误写法

nohup python app.py &

此时:

  • 输出默认到 nohup.out
  • 如果你以为在 log.txt 看,那就是空的

✅ 正确写法

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

三、程序根本没产生输出

有些程序:

  • 只写日志文件
  • 不写 stdout
  • 或日志级别太高(ERROR)

✅ 排查:

ps -ef | grep app
strace -p PID

四、输出被 shell 吃掉了(subshell / exec)

例如:

nohup sh -c "python app.py" > log.txt &

可能重定向位置不对。

✅ 推荐写法

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

五、nohup.out 被覆盖但你看错了文件

默认:

nohup command

→ 输出到 nohup.out

但你可能在看:

  • log.txt
  • 另一个目录的 nohup.out

✅ 检查

ls -l nohup.out
pwd

六、程序启动即崩溃(但你看不到)

如果程序立刻退出:

  • 可能没来得及输出
  • 日志是空的

✅ 检查退出状态

echo $?

七、磁盘 / 权限问题

  • 目录不可写
  • 磁盘满
  • inode 满

✅ 检查

df -h
df -i

八、推荐的安全写法(通用)

nohup your_command >> run.log 2>&1 &

实时查看:

tail -f run.log

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

  • 用的什么语言(Python / Java / Shell)
  • 启动命令
  • 操作系统

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

0