温馨提示×

linux nohup日志为何不输出

小樊
37
2026-09-03 10:29:59
栏目: 智能运维

在 Linux 下使用 nohup 时,日志不输出是一个很常见的问题,通常不是 nohup 本身“没写日志”,而是输出被重定向、缓冲或写错地方了。下面按常见原因逐个说明。


一、最常见原因:标准输出/错误没正确重定向

1️⃣ 只重定向了 stdout,没重定向 stderr

nohup python app.py > app.log &

如果程序是报错退出打印到 stderr,你不会在 app.log 看到内容。

✅ 正确写法:

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

或:

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

二、日志“看起来没输出”,其实是缓冲问题(非常常见)

2️⃣ Python / Java / Node 等存在输出缓冲

不是终端时,很多程序会启用块缓冲

  • stdout 不会立刻写文件
  • 程序退出或缓冲区满才写

Python 示例

nohup python app.py > app.log &

可能几小时都没内容。

✅ 解决方式:

方法 1:关闭缓冲(推荐)

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

方法 2:用 stdbuf

nohup stdbuf -oL python app.py > app.log 2>&1 &

三、nohup.out 没出现 / 不在当前目录

3️⃣ 没重定向时,nohup 默认写 nohup.out

nohup ./app &

日志应在:

./nohup.out

但如果:

  • 当前目录不可写
  • 你后来 cd 到别的目录

就“找不到日志”。

✅ 建议始终显式重定向:

nohup ./app > /var/log/app.log 2>&1 &

四、程序早就退出了(你以为在跑)

4️⃣ 进程已死,当然没日志

ps -ef | grep app

或:

jobs -l

如果进程不在了,看:

cat nohup.out
cat app.log

可能只有启动失败信息。


五、被系统或 shell 吞掉了输出

5️⃣ 在脚本中使用 nohup 但没继承 FD

例如:

nohup sh run.sh &

run.sh 里没处理输出。

✅ 正确:

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

六、特殊情况

6️⃣ 输出被 systemd / cron 接管

  • cron 任务默认不发终端
  • systemd 服务要配置 StandardOutput=file

✅ 推荐的标准写法(万能模板)

nohup your_command > app.log 2>&1 &

或带无缓冲:

nohup stdbuf -oL your_command > app.log 2>&1 &

如果你愿意,可以把:

  • 你用的命令
  • 程序语言(Python / Java / Shell 等)
  • 是否重定向
  • 日志文件是否为空

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

0