温馨提示×

nohup日志为什么突然停止

小樊
55
2026-09-27 16:23:17
栏目: 编程语言

nohup 日志突然停止,通常不是“程序被 nohup 杀掉”这么简单,而是要分几种情况来看。下面按最常见原因 → 排查方法给你梳理:


一、程序其实已经退出(最常见)

表现

  • 日志不再增长
  • ps 里找不到进程
  • nohup.out 最后一行像是正常结束

原因

  • 程序跑完了(正常退出)
  • 程序抛异常 / 段错误 / OOM 被系统杀掉
  • 程序中调用了 exit()

排查

ps -ef | grep 你的程序
dmesg | grep -i kill

看是否出现 Out of memory


二、标准输出被缓冲,看起来“停了”

表现

  • 进程还在
  • 但日志很久不更新
  • 用 strace 或 ls -l 看文件大小没变

原因

  • 程序输出被 缓冲区 缓存(尤其是 C / Python 非 flush)
  • 日志其实在内存里,没写盘

解决

  • Python:
python -u xxx.py

或代码里:

print(x, flush=True)
  • C:
fflush(stdout);

三、日志被重定向走了

你可能以为是 nohup.out,但其实:

nohup xxx > app.log 2>&1 &

排查

ls -l /proc/进程号/fd

看 1 和 2 指向哪个文件


四、磁盘 / inode / 权限问题

表现

  • 进程在
  • 日志不动
  • 手动 echo >> nohup.out 也失败

排查

df -h
df -i
touch nohup.out

五、nohup 被终端信号影响(少见)

如果你:

  • 没完全脱离终端
  • 用了 Ctrl+C 或关闭 shell 不规范

建议写法(更稳)

nohup xxx > run.log 2>&1 &
disown

或用 setsid:

setsid xxx > run.log 2>&1 &

六、日志被 logrotate 截断

  • 日志突然“清空”或“变小”
  • 进程还在

排查

ls -l nohup.out
cat /etc/logrotate.d/*

快速自查清单 ✅

  1. 进程还在吗?
  2. 文件大小在变吗?
  3. 是缓冲还是真停?
  4. 是否 OOM / 异常退出?
  5. 日志到底写到哪了?

如果你愿意,可以把:

  • 启动命令
  • 程序语言
  • nohup.out 最后几行 发出来,我可以直接帮你判断是哪一种。

0 踩