在 CentOS 上使用 nohup 时,日志为空通常不是 nohup 本身的问题,而是程序本身没有向终端输出,或者输出被其他地方接管了。下面按最常见原因逐一说明,并给出排查方法。
很多程序默认不输出到 stdout,比如:
✅ 验证方法:
strace -e write -p <pid>
或直接在终端前台运行程序,看是否有输出。
你可能以为输出在 nohup.out,但实际上已经重定向了。
常见错误示例:
nohup ./app > /dev/null
nohup ./app > app.log
✅ 检查命令:
ps -ef | grep app
看看命令行里是否有 > 或其他重定向。
systemd / supervisor / docker如果程序是通过 systemd 启动的:
nohup.out 不会产生journalctl 或 service 配置中✅ 检查:
systemctl status your.service
journalctl -u your.service
这是 CentOS / Linux 上最常见原因之一
stdout✅ 典型现象:
nohup.out 为空或很久才写入✅ 解决方案:
Python
nohup python -u app.py > nohup.out 2>&1 &
C / C++
setbuf(stdout, NULL);
Java
nohup java -Djava.util.logging.config.file=logging.properties ...
nohup.out 默认只重定向 stdout
✅ 正确写法:
nohup ./app > nohup.out 2>&1 &
或分开:
nohup ./app > stdout.log 2> stderr.log &
程序可能:
✅ 检查:
nohup.out
app.log
/var/log/messages
journalctl -xe
✅ 最稳妥的 nohup 写法
nohup ./app > app.log 2>&1 &
✅ 查看实时日志
tail -f app.log
# 1. 程序是否在运行
ps -ef | grep app
# 2. 是否有输出文件
ls -lh nohup.out app.log
# 3. 查看文件内容
cat nohup.out
cat app.log
# 4. 是否由 systemd 管理
systemctl list-units | grep app
# 5. 是否标准输出被缓冲
strace -e write -p <pid>
CentOS 下 nohup 日志为空,90% 是因为:输出被缓冲 / 输出到 stderr / 程序没输出 / 被 systemd 接管。
如果你愿意,可以把:
贴出来,我可以直接帮你定位 ✅