温馨提示×

ubuntu nohup日志为何不输出

小樊
40
2026-10-15 12:38:58
栏目: 智能运维

在 Ubuntu 上使用 nohup 时,日志“不输出”通常不是 nohup 本身的问题,而是输出被缓冲、重定向位置不对,或被系统/journal接管了。下面按最常见原因逐一说明。


一、最常见原因:输出被缓冲(尤其是 Python / Java)

现象

nohup python app.py &

nohup.out 里一开始什么都没有,过很久才出现,或程序退出后才出现。

原因

  • stdout 是块缓冲(非终端时)
  • 日志积攒在内存里,没实时写盘

解决办法

Python

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

或代码里:

print(x, flush=True)

Java

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

或加:

stdbuf -oL -eL java App

二、你没重定向,但以为会输出到终端

错误示例

nohup ./app.sh

然后关掉终端,发现“没日志”

事实

  • nohup 默认会把输出写到 当前目录的 nohup.out
  • 如果你 cd 到了没权限或不在预期目录,就会“看起来没日志”

建议写法(推荐)

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

三、日志其实写了,但你找错地方

常见位置:

nohup.out
./app.log
~/nohup.out

检查:

ls -l nohup.out
tail -f nohup.out

四、程序本身没输出(不是 nohup 的问题)

确认方式:

./your_program

直接运行看有没有输出。

如果直接运行也没输出:

  • 日志级别太高(ERROR)
  • 配置写到了别的地方

五、Ubuntu + systemd 场景(容易混淆)

如果你是用:

service xxx start
# 或
systemctl start xxx

那 nohup 根本不生效,日志在:

journalctl -u xxx

六、磁盘 / 权限问题

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

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

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

或:

setsid ./app > app.log 2>&1 < /dev/null &

快速排查清单 ✅

  • [ ] 是否用了 -u / stdbuf
  • [ ] 是否重定向到明确文件
  • [ ] 是否 tail -f 看了正确文件
  • [ ] 是否其实是 systemd 服务
  • [ ] 程序本身是否有输出

如果你愿意,可以贴出:

  • 启动命令
  • 程序语言
  • 是否有 nohup.out

我可以直接帮你定位是哪一类问题。

0 踩