nohup 日志“丢失”通常不是文件真的被删了,而是日志没写到你以为的地方,或者进程根本没起来 / 被重定向错了。下面按常见原因逐一说明:
很多人这样用:
nohup python app.py &
默认日志会写到:
nohup.out # 在当前工作目录
如果你后来 cd 到其他目录,就找不到原来的 nohup.out 了。
✅ 建议明确指定:
nohup python app.py > /var/log/app.log 2>&1 &
错误示例:
nohup python app.py 2>&1 > app.log &
⚠️ 这样 2>&1 会在重定向前生效,stderr 还是进 nohup.out
✅ 正确顺序:
nohup python app.py > app.log 2>&1 &
但因为你用了 &,错误可能:
✅ 排查:
jobs
ps -ef | grep app.py
exit / 会话异常虽然 nohup 能避开 HUP,但如果:
& 但 shell 直接 kill进程可能根本没运行多久。
> app.log # 手动清空
nohup xxx > app.log &
旧日志没了。
如果日志在 /var/log,可能被:
logrotate
直接 rotate + 删除。
Python 示例:
logging.warning("xxx")
但没加:
logging.basicConfig()
→ 不写文件,也不写 stdout
Python:
nohup python app.py > log &
但程序不 flush,日志“看起来丢了”
✅ 解决方法:
python -u app.py
或:
print(x, flush=True)
✅ 检查:
df -h
ls -l 日志目录
有些程序:
/tmp/xxx.logjournalctl -u xxx
| 现象 | 可能原因 |
|---|---|
| 没有 nohup.out | 被重定向走了 |
| 有文件但为空 | 输出被缓冲 |
| 文件突然没了 | 被覆盖 / logrotate |
| 启动没日志 | 程序直接退出 |
| 找不着文件 | 当前目录不对 |
如果你愿意,可以把:
nohup 启动命令发出来,我可以直接帮你定位是哪一类问题。