在 CentOS 上使用 nohup 时“日志不生成”是一个常见但不一定是 bug 的问题,通常和重定向方式、程序行为、权限或环境有关。下面按最常见原因逐一说明。
nohup 默认只会把 stdout 写入 nohup.out,但很多人这样用:
nohup python app.py &
如果:
就可能出现“看不到日志”的情况。
✅ 正确写法(推荐):
nohup python app.py > app.log 2>&1 &
含义:
> app.log:stdout 写入日志2>&1:stderr 也写入日志有些程序:
✅ 验证方法:
ps -ef | grep app.py
如果进程在跑,但没日志,那是程序没输出,不是 nohup 的问题。
如果你这样运行:
nohup command &
日志默认生成在:
nohup.out常见问题:
/root 执行,但去 /home 找cd 到了别的目录✅ 查找 nohup.out:
find / -name nohup.out 2>/dev/null
如果你指定了日志路径:
nohup app > /var/log/app.log 2>&1 &
但:
日志就不会生成。
✅ 检查权限:
ls -ld /var/log
touch /var/log/test.log
例如:
表现:
✅ 排查:
nohup app > app.log 2>&1 &
echo $!
sleep 2
ps -p $!
如果进程不在,看日志或 journalctl。
在 CentOS 7/8:
有时 stdout 被吞掉。
✅ 更稳妥方案(推荐):
setsid python app.py > app.log 2>&1 &
或直接使用 systemd service(生产环境最佳)。
df -h
如果磁盘 100%,日志不会生成。
nohup your_command > run.log 2>&1 &
然后:
tail -f run.log
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一条原因。