在 Linux 下使用 nohup 运行程序时,日志(通常是 nohup.out)突然中断或不再更新,常见原因有以下几种,按出现频率从高到低说明:
这是最常见原因。
ps 能看到)✅ 排查:
ps aux | grep 程序名
strace -p PID
如果卡在 read()、futex() 等,就是阻塞了。
很多语言(如 Python、C++)在非终端输出时会缓冲。
✅ 表现:
✅ 解决:
python -u app.py
或
print(x, flush=True)
setvbuf(stdout, NULL, _IONBF, 0);
✅ 检查:
df -h
dmesg | tail
logrotate 移动✅ 现象:
lsof | grep nohup.out 显示文件已删除✅ 解决:
>> 追加nohup app >> app.log 2>&1 &
某些框架或脚本:
✅ 检查:
ls -l /proc/PID/fd
✅ 检查:
dmesg | grep -i oom
nohup 只是:
不保证:
✅ 更稳妥方案:
setsid ./app >> app.log 2>&1 &
或用:
systemdsupervisortmux / screenps aux | grep 程序
lsof -p PID
df -h
tail -f app.log
strace -p PID
如果你愿意,可以告诉我:
我可以更精确地判断。