温馨提示×

为何nohup日志丢失了

小樊
58
2026-10-06 11:19:37
栏目: 编程语言

nohup 日志“丢失”通常不是真的被删了,而是没写到你以为的地方,或者进程根本没正常输出。常见原因有这些:


1. 你以为的日志文件不是实际那个

常见写法:

nohup python app.py &

很多人以为日志在 nohup.out,但:

  • 如果在别的目录启动,nohup.out 就在那个目录
  • 如果重定向过,就不会写 nohup.out

例如:

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

那日志在 log.txt,不在 nohup.out

✅ 查法:

ls -lat | head
pwd
lsof -p <pid> | grep txt

2. 程序用了缓冲(最常见)

Python / Java / Node 经常缓冲输出:

  • 标准输出不是立刻写文件
  • 进程被 kill / 服务器重启 → 缓冲没刷盘 → 日志“没了”

✅ 解决:

python -u app.py

或:

stdbuf -oL nohup python app.py

3. 进程被 kill 或系统重启

  • kill -9
  • 服务器重启
  • OOM 被杀

这些情况:

  • 没机会 flush
  • 日志只到某一行就断

✅ 查:

dmesg | grep -i kill
last reboot

4. 日志被覆盖

如果你写了:

nohup xxx > log.txt

再次启动没加 >>,就会覆盖

✅ 用:

>> log.txt 2>&1

5. 输出其实去了 /dev/null

有些脚本或启动器会:

>/dev/null 2>&1

你以为在跑 nohup,其实被吞了


6. 你 tail 错了文件 / 文件被轮转

  • logrotate 切走了
  • 你 tail 的是旧文件

✅ 查:

ls -l /path/*.log*

7. 程序没报错也没输出

有些程序:

  • 启动失败直接退出
  • 根本没写日志

✅ 查退出码:

echo $?

推荐稳妥写法

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

或更好:

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

如果你愿意,可以把:

  • 启动命令
  • 你查日志的方式
  • 操作系统

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

0 踩