温馨提示×

centos nohup日志为啥丢失

小樊
44
2026-10-09 02:24:02
栏目: 智能运维

在 CentOS(以及绝大多数 Linux 发行版)上,用 nohup 启动程序后“日志丢失”通常不是 nohup 本身把日志删了,而是使用方式或运行环境导致输出没写到你以为的地方。下面按最常见原因逐一说明。


1. 没重定向标准错误(stderr)

nohup 默认只保证 stdout 不被挂断信号影响,并且:

nohup command

默认会:

  • stdout → nohup.out
  • stderr → 终端(或继承的环境)

⚠️ 很多程序重要日志都打到 stderr(如 Java、Python 异常、systemd 服务)。

现象

  • nohup.out 里没内容
  • 日志“好像丢了”

正确写法

nohup command > app.log 2>&1 &

或分开:

nohup command > out.log 2> err.log &

2. 你以为日志在 nohup.out,其实被重定向了

常见写法:

nohup python app.py > log.txt &

此时:

  • nohup.out 不会生成
  • 日志只在 log.txt

如果你后来去找 nohup.out,自然“找不到”。


3. 程序启动失败,根本没运行

例如:

  • 路径错
  • 依赖缺失
  • 端口被占用

结果:

  • nohup 启动了
  • 程序立刻退出
  • 日志文件可能是空的

排查方法

ps -ef | grep 程序名
tail -f 日志文件

4. 当前目录不是你以为的目录

nohup.out 或相对路径日志会写在 当前 shell 的工作目录。

例如:

cd /tmp
nohup /opt/app/run.sh &

日志在 /tmp,不在 /opt/app

✅ 建议用绝对路径:

nohup /opt/app/run.sh > /var/log/app.log 2>&1 &

5. 磁盘满了 / 权限不足

  • 目录不可写
  • inode 满
  • 磁盘 100%

现象:

  • 日志文件存在但 0 字节
  • 或根本创建不了

检查:

df -h
df -i
ls -l 日志目录

6. 被 systemd / 容器 / 跳板环境“接管”

场景

  • 在 systemd 服务里用 nohup(不推荐)
  • 在 Docker 容器里
  • 在 Web 终端 / 云控制台

结果:

  • nohup 行为异常
  • 日志被父进程回收

✅ 正确方式:

  • 服务用 systemd
  • 容器用 docker logs

7. nohup 进程被 kill,但没 flush

有些程序:

  • 使用缓冲 IO
  • 被 kill -9 强制结束

导致:

  • 内存中的日志没写入文件

✅ 可加:

python -u app.py

或

stdbuf -oL nohup command

推荐的标准写法 ✅

nohup /path/to/app \
  > /var/log/app/app.log \
  2>&1 \
  &

并配合:

tail -f /var/log/app/app.log

如果你愿意,可以把你的启动命令 + 日志现象贴出来,我可以直接帮你定位是哪一种原因。

0 踩