温馨提示×

nohup日志丢失什么原因

小樊
39
2026-09-18 14:26:46
栏目: 编程语言

nohup 日志“丢失”通常不是文件真的被删了,而是日志没写到你以为的地方,或者进程根本没起来 / 被重定向错了。下面按常见原因逐一说明:


一、最常见原因:重定向位置不对

1. 你以为的日志文件,其实不是

很多人这样用:

nohup python app.py &

默认日志会写到:

nohup.out   # 在当前工作目录

如果你后来 cd 到其他目录,就找不到原来的 nohup.out 了。

✅ 建议明确指定:

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

2. 重定向写反了(经典坑)

错误示例:

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

⚠️ 这样 2>&1 会在重定向前生效,stderr 还是进 nohup.out

✅ 正确顺序:

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

二、程序没真正启动(日志自然没有)

1. 启动即报错退出

  • 端口被占用
  • 依赖缺失
  • 配置文件路径错误

但因为你用了 &,错误可能:

  • 进了 nohup.out
  • 或直接被 shell 吞掉

✅ 排查:

jobs
ps -ef | grep app.py

2. 使用了 exit / 会话异常

虽然 nohup 能避开 HUP,但如果:

  • 用了 & 但 shell 直接 kill
  • 容器 / 云环境自动回收

进程可能根本没运行多久。


三、日志被覆盖 / 清空

1. 多次启动覆盖

> app.log   # 手动清空
nohup xxx > app.log &

旧日志没了。

2. logrotate 误删

如果日志在 /var/log,可能被:

logrotate

直接 rotate + 删除。


四、输出被程序自己“吃掉”

1. 程序用了 logging,但没配置 handler

Python 示例:

logging.warning("xxx")

但没加:

logging.basicConfig()

→ 不写文件,也不写 stdout

2. 输出被缓冲(非常常见)

Python:

nohup python app.py > log &

但程序不 flush,日志“看起来丢了”

✅ 解决方法:

python -u app.py

或:

print(x, flush=True)

五、磁盘 / 权限问题

  • 磁盘满了
  • 目录无写权限
  • SELinux / 容器只读文件系统

✅ 检查:

df -h
ls -l 日志目录

六、你找错“日志”了

有些程序:

  • 自己写 /tmp/xxx.log
  • 写 systemd journal
journalctl -u xxx

总结速查表

现象 可能原因
没有 nohup.out 被重定向走了
有文件但为空 输出被缓冲
文件突然没了 被覆盖 / logrotate
启动没日志 程序直接退出
找不着文件 当前目录不对

如果你愿意,可以把:

  • 你的 nohup 启动命令
  • 运行环境(Linux / 容器 / 云服务器)
  • 程序语言

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

0