在 CentOS 下使用 nohup 时,日志不输出通常不是 nohup 本身的问题,而是输出方式、缓冲或重定向的问题。下面按常见原因逐一说明,并给出排查和解决方法。
nohup 启动后,nohup.out 里没有内容或很久才出现很多程序(尤其是 Python、Java、C/C++)在:
\n 就刷新Python 示例
nohup python -u your_script.py > nohup.out 2>&1 &
-u 表示不缓冲 stdout/stderr
或代码中:
print("xxx", flush=True)
C / C++
setvbuf(stdout, NULL, _IONBF, 0);
nohup ./app
但程序输出到了:
nohup ./app > nohup.out 2>&1 &
说明:
> nohup.out:重定向 stdout2>&1:stderr 也写入 nohup.out/var/log/xxx.loglsof -p PID
看看程序实际打开了哪些文件。
nohup.out 会生成在启动命令时的当前目录cd /tmp
nohup /opt/app/run.sh &
日志在 /tmp/nohup.out,不是 /opt/app/
明确指定路径:
nohup ./app > /data/logs/app.log 2>&1 &
ps -ef | grep app
或查看:
nohup.out
里面可能有报错信息(如 Java 缺少依赖)
如果你在 systemd 服务 或 cron 里调用 nohup:
✅ 解决:
nohupsystemd 管理✅ 最稳妥写法
nohup your_command > /data/logs/app.log 2>&1 &
✅ 查看实时日志
tail -f /data/logs/app.log
你可以直接贴出:
我可以精确告诉你为什么没输出,以及怎么改。