在 CentOS 上使用 nohup 运行程序时,日志突然中断(不再增长)是很常见的问题,通常不是 nohup 本身坏了,而是下面这些原因导致的。我按最常见 → 较少见给你梳理。
nohup 只能保证你退出终端不中断程序,但不能保证程序不被杀。
常见情况:
✅ 排查方法:
dmesg | grep -i kill
或
grep -i oom /var/log/messages
✅ 确认进程是否还在:
ps -ef | grep 你的程序
很多程序(尤其 Java / Python)日志有缓存,不会立刻写文件。
症状:
nohup.out 不增长✅ 解决方法:
-DLog4j2.asyncQueueFullPolicy=Discardprint(..., flush=True)
python -u xxx.py
你可能看到的是:
nohup command > out.log 2>&1 &
但程序内部又写了别的日志路径。
✅ 检查:
lsof -p PID | grep log
CentOS 上磁盘满了,nohup.out 会直接停止增长。
✅ 检查:
df -h
❌ 错误:
nohup python app.py
然后直接关终端
✅ 正确:
nohup python app.py > app.log 2>&1 &
如果程序里调用了:
close(1);
或重定向到 /dev/null,日志当然没内容。
如果你是在:
启动的进程,可能会被 session 回收。
✅ 更稳妥方案(推荐):
setsid nohup command > log 2>&1 &
有人执行了:
> nohup.out
或 logrotate 配置不当。
✅ 稳定写法
setsid nohup your_command > run.log 2>&1 &
✅ 长期运行推荐
# 用 systemd(最稳)
vim /etc/systemd/system/your.service
如果你愿意,可以把下面信息发我,我能精准判断:
ps 是否还能看到进程我可以直接告诉你是哪一条原因。