温馨提示×

linux nohup日志为何丢失了

小樊
36
2026-10-21 01:05:08
栏目: 智能运维

在 Linux 中使用 nohup 时,日志“丢失”通常不是真的被删除了,而是写到了你没注意的地方,或者进程根本没正常写日志。下面按常见原因逐一说明,并给出排查办法。


一、最常见原因:nohup.out 不在你以为的目录

现象

nohup python app.py &

你以为日志在:

~/nohup.out

但实际上可能在:

/your/start/dir/nohup.out

原因

  • nohup.out 默认生成在“执行 nohup 时的当前目录”
  • 如果你是在脚本、cron、systemd、IDE 里启动的,当前目录可能不是你以为的

排查

find / -name nohup.out 2>/dev/null

或:

lsof -p <pid> | grep nohup

二、日志被重定向走了(你没注意)

常见写法:

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

此时:

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

如果路径是相对路径:

nohup ./start.sh > log.txt &

那 log.txt 也在启动目录

✅ 建议写法(明确路径):

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

三、程序根本没写日志(不是 nohup 的问题)

常见情况

  • 程序用 print(),但:
    • 输出被缓冲(Python 常见)
  • 程序异常退出,什么都没写

Python 缓冲问题(非常重要)

nohup python app.py &

可能几个小时都不写一行

✅ 解决:

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

或:

print("log", flush=True)

四、进程启动失败,自然没日志

例如:

  • 依赖缺失
  • 端口被占用
  • 权限不足

检查

ps aux | grep app.py
dmesg | tail
journalctl -xe

五、nohup.out 被覆盖 / 删除

情况 1:重复启动

nohup xxx &
nohup xxx &

第二次可能:

  • 覆盖
  • 或因为文件被占用而失败

情况 2:你删了 nohup.out,但进程还活着

rm nohup.out

此时:

  • 日志还在内存/文件描述符中
  • 磁盘上看不到,但进程仍在写

✅ 修复:

ls -l /proc/<pid>/fd

找到被删文件,copy 回来


六、在 cron / systemd 中启动(特别容易“丢”)

cron 中

* * * * * nohup /home/user/app.sh
  • 当前目录是 $HOME
  • 没有终端
  • 日志可能发到 mail

✅ 正确写法:

* * * * * /home/user/app.sh >> /home/user/app.log 2>&1

七、磁盘满了 / 权限不足

df -h
touch nohup.out

八、推荐的安全做法(避免“日志丢失”)

✅ 明确路径 + 不缓冲 + 后台

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

✅ 生产环境更推荐

  • systemd
  • supervisor
  • tmux / screen

总结一句话

nohup 日志“丢失”,99% 是因为: 日志写到了别的地方,或程序没真正输出

如果你愿意,可以把你的:

  • 启动命令
  • 运行环境(shell / cron / systemd)
  • 程序语言

贴出来,我可以帮你精确定位。

0 踩