在 CentOS 上使用 nohup 时,日志为空是比较常见的问题,通常不是 nohup 本身坏了,而是程序没往你以为的地方写、或者程序根本没跑、或者输出被缓冲了。下面按最常见原因逐一说明:
nohup your_command > nohup.out 2>&1 &
如果:
程序会立刻退出,nohup.out 可能是 0 字节。
✅ 排查:
echo $?
jobs
ps -ef | grep your_command
很多人以为日志在 nohup.out,但其实:
✅ 确认:
ls -l nohup.out
pwd
如果用了:
nohup app > /var/log/app.log 2>&1 &
那就看 /var/log/app.log
很多程序(尤其是 Python、Java、Go):
✅ 表现:
✅ 解决办法:
python -u app.py
或
print(x, flush=True)
java -Djava.util.logging.manager=...
或确保使用 System.out.flush()
stdbuf -oL nohup your_command > nohup.out 2>&1 &
如果你这样启动:
nohup app > nohup.out &
但程序只输出到 stderr,那 nohup.out 就是空的。
✅ 正确写法:
nohup app > nohup.out 2>&1 &
CentOS 上:
✅ 更稳妥方式(推荐):
setsid your_command > nohup.out 2>&1 &
或
nohup your_command > nohup.out 2>&1 &
disown
很多服务(如 nginx、mysql、自定义程序):
✅ 查看程序配置:
grep log app.conf
nohup your_command > run.log 2>&1 &
disown
或者更稳:
setsid your_command > run.log 2>&1 &
ps 看进程是否在2>&1如果你愿意,可以把:
发出来,我可以直接帮你精准定位原因。