nohup 日志停止写入,通常不是 nohup 本身的问题,而是程序、输出缓冲、文件句柄或运行环境发生了变化。常见原因和排查思路如下:
排查:
ps -ef | grep 你的程序
或
jobs -l
很多程序(尤其是 Python、Java、C++)不是实时写磁盘:
表现:
nohup.out 很久不更新解决:
python -u app.py
或
print(..., flush=True)
fflush(stdout);
程序可能:
检查:
lsof -p 进程PID
看 cwd 和打开的文件
如果你做过:
mv nohup.out nohup.out.bak
或
rm nohup.out
结果:
验证:
ls -l /proc/进程PID/fd
解决:
> nohup.out
(清空,而不是删除)
df -h
touch nohup.out
启动命令可能是:
nohup xxx > /dev/null 2>&1 &
虽然 nohup 本应防止,但:
nohup python -u app.py > app.log 2>&1 &
或更好的方式(生产推荐):
setsid python -u app.py > app.log 2>&1 &
✅ 进程是否还在
✅ 是否使用了 -u / 无缓冲
✅ nohup.out 是否被删/移
✅ 磁盘是否满
✅ 日志是否写到了别的文件
如果你愿意,可以把:
ps / lsof 输出发出来,我可以帮你精确定位。