在 CentOS 上使用 nohup 时,日志为空通常不是 nohup 本身的问题,而是程序输出方式、启动方式或 Shell 行为导致的。下面按常见原因逐一说明,并给出对应解决办法。
很多程序:
✅ 解决:
nohup your_app --verbose > nohup.out 2>&1 &
或查看程序是否支持:
your_app -h
找 log / debug / verbose 参数
你可能写了:
nohup your_app > /dev/null 2>&1 &
或者:
nohup your_app > log.txt &
但程序内部又重定向了日志(如 syslog、/var/log/xxx)
✅ 解决:
lsof -p PID 看实际写入的文件Java / Python / C++ 程序在 nohup 下经常“假空”
原因:
✅ 解决:
nohup python -u app.py > nohup.out 2>&1 &
或代码里:
print("log", flush=True)
nohup java -Djava.util.logging.manager=... \
-XX:+UseConcMarkSweepGC \
your.jar > nohup.out 2>&1 &
fflush(stdout)setvbuf(stdout, NULL, _IONBF, 0)如果你:
su / sudonohup.out 可能不在当前目录
✅ 查找:
find / -name nohup.out 2>/dev/null
如果程序一启动就崩:
nohup.out 可能 0 字节✅ 正确写法:
nohup your_app > nohup.out 2>&1 &
然后:
cat nohup.out
ps -ef | grep your_app
在 CentOS 7/8:
nohup + & 可能被 systemd 杀掉✅ 推荐:
systemctl status your_service
journalctl -u your_service
nohup your_command > run.log 2>&1 &
tail -f run.log
-u / --verbose / debug?/dev/null?如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一条原因。