温馨提示×

centos nohup日志为何断掉了

小樊
50
2026-09-30 07:58:24
栏目: 智能运维

在 CentOS 上使用 nohup 运行程序时,日志突然“断掉”或不继续写入,通常不是 nohup 本身的问题,而是下面几类原因最常见。我按出现频率给你梳理一下,并给出排查和解决办法。


一、最常见原因

1️⃣ 程序自己退出了(日志“断”是因为进程没了)

nohup 只是“忽略 SIGHUP”,不代表程序不会退出。

检查:

ps -ef | grep 你的程序

如果进程不在了:

  • 程序异常崩溃
  • 被 OOM Killer 杀掉
  • 主动 exit

看系统日志:

dmesg | grep -i kill
journalctl -xe

2️⃣ 标准输出被重定向,但程序写的是 stderr

很多人这样写:

nohup python app.py > log.txt &

但程序报错是写到 stderr,结果:

  • stdout 没内容
  • 看起来“日志断了”

✅ 正确写法:

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

或

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

3️⃣ 日志被 logrotate 或外部工具截断了

CentOS 默认有 logrotate,如果:

  • 日志被 rename
  • 原 fd 还指向旧文件

现象:

  • ls -l 看到文件大小不变
  • lsof | grep log

解决:

  • 程序支持 reload 信号(HUP)
  • 或使用 copytruncate

4️⃣ 磁盘满了 / inode 用尽

df -h
df -i

磁盘满时:

  • nohup 无法写入
  • 进程可能假死

5️⃣ 输出被缓冲(看起来“断”)

特别是:

  • Python
  • Java
  • Go(非实时 flush)

现象:

  • 程序在跑
  • 日志很久才写一次

解决:

python -u app.py

或程序中显式 flush


6️⃣ 终端关闭方式不对(不是 nohup 的问题)

如果你:

  • 没用 &
  • 或用了 Ctrl + Z 没 bg

仍可能断。

✅ 推荐组合:

nohup 命令 >> log 2>&1 &
disown

二、推荐的“稳妥写法”

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

或更好:

setsid your_command >> app.log 2>&1 &

三、更好的替代方案(强烈建议)

在 CentOS 7+:

  • systemd
  • supervisord

比 nohup 稳定得多。


四、快速自检清单

ps -ef | grep 程序
lsof | grep log
df -h
df -i
tail -f app.log

如果你愿意,可以把:

  • 启动命令
  • 日志现象(完全停 / 变慢 / 文件不变)
  • CentOS 版本

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

0 踩