在 Linux 下使用 nohup 运行程序时,日志突然停止写入是比较常见的问题,通常不是 nohup 本身“坏了”,而是以下某一种原因导致的。
ps -ef | grep your_program
如果进程不在了,日志当然不写。
常见原因:
✅ 解决:
nohup cmd > log 2>&1 &supervisor / systemd你可能以为在写 nohup.out,其实:
nohup python app.py > app.log 2>&1 &
日志在 app.log
✅ 检查:
ls -l /proc/<pid>/fd
例如 Python:
nohup python test.py > log &
Python 发现不是终端 → 全缓冲 可能几分钟甚至几小时都不写盘。
✅ 解决:
python -u test.py
或
stdbuf -oL python test.py
df -h
df -i
如果 100%,日志无法写入。
例如:
nohup.out 改名✅ 检查:
ls -l /proc/<pid>/fd
✅ 解决:
logrotate + copytruncateSIGUSR1 让程序重开日志你可能只看:
tail -f nohup.out
但错误在 stderr。
✅ 正确写法:
nohup cmd > out.log 2>&1 &
rm nohup.out
但进程还活着 → 日志“消失”
✅ 查看:
ls -l /proc/<pid>/fd
✅ 恢复:
cat /proc/<pid>/fd/1 > nohup.out
nohup ./your_app >> app.log 2>&1 &
或更好的方式:
setsid ./your_app >> app.log 2>&1 < /dev/null &
长期运行强烈建议:
systemdsupervisord如果你愿意,可以把:
贴出来,我可以直接帮你定位是哪一条。