在 Debian(及其他 Linux 发行版)上,nohup 启动的进程日志为空是非常常见的问题,通常不是 nohup 本身有问题,而是输出缓冲、重定向方式或程序行为导致的。下面按最常见原因逐步说明。
nohup.out 为空是因为输出被缓冲很多程序(尤其是 Python、Java、C++ 写的服务):
nohup.out✅ 表现:
nohup.out 一直是 0 字节nohup python3 -u app.py > nohup.out 2>&1 &
-u 表示 无缓冲输出
或:
PYTHONUNBUFFERED=1 nohup python3 app.py > nohup.out 2>&1 &
nohup 默认只保证忽略 SIGHUP,不代表一定写 nohup.out
如果程序自己:
那么 nohup.out 就是空的
✅ 检查方式:
ls -l /proc/<pid>/fd
如果:
0 -> /dev/null
1 -> /dev/null
说明输出被程序自己处理了
你以为在写 nohup.out,其实没有:
❌ 错误示例:
nohup ./app &
但程序内部:
freopen("app.log", "w", stdout);
✅ 正确写法(显式重定向):
nohup ./app > nohup.out 2>&1 &
比如:
✅ 验证:
ps aux | grep app
strace -p <pid>
systemd 或 screen/tmux 更推荐[Service]
ExecStart=/opt/app/app
StandardOutput=journal
StandardError=journal
查看日志:
journalctl -u app.service -f
避免 nohup 的各种坑:
tmux new -s app
./app
> nohup.out 2>&1-u)如果你愿意,可以把:
ps / lsof 输出发出来,我可以直接帮你定位是哪一条原因。