nohup 日志“丢失”通常不是 nohup 本身把日志删了,而是日志被重定向方式、缓冲、或进程退出方式影响了。常见原因有下面几类:
很多人以为 nohup cmd & 就一定会写 nohup.out,其实不一定。
nohup python app.py &
✅ 默认会写 nohup.out(在当前目录)
但如果:
nohup python app.py > /dev/null 2>&1 &
那日志直接被丢弃,当然“看不到”
或者:
nohup python app.py > log.txt
但 2>&1 没加,错误日志不在 log.txt 里
✅ 推荐写法:
nohup python app.py > app.log 2>&1 &
nohup.out 是写在启动命令时的当前目录:
cd /tmp
nohup xxx &
如果:
cd 到别的地方你就找不到 nohup.out
✅ 建议显式指定绝对路径:
nohup xxx > /var/log/xxx.log 2>&1 &
很多程序(尤其是 Python、Java):
tail -f 时啥也看不到print("start")
time.sleep(3600)
日志可能不会立刻出现
✅ 解决:
python -u app.py
或:
print("start", flush=True)
如果你:
Ctrl + Ckill -9缓冲中的日志不会写入文件
✅ 正常退出:
kill PID
如果:
> log 而不是 >> log你可能看到“旧日志没了”
✅ 用追加:
>> app.log 2>&1
nohup 只做一件事:
忽略 SIGHUP,让进程不被终端关闭杀掉
它不保证日志完整、不轮转、不持久化
生产环境更推荐:
systemdsupervisorscreen / tmuxps -ef | grep 你的进程
ls -l 你写的日志路径
tail -f 日志路径
如果你愿意,可以贴一下:
我可以直接帮你定位是哪一类问题。