在 Debian 下使用 nohup 时“日志不输出”,通常不是 nohup 本身的问题,而是输出目标、缓冲方式或重定向写法导致的。下面按最常见原因逐一说明。
nohup python app.py > app.log 2>&1 &
程序在跑,但 app.log 里很久都没有内容。
很多程序(如 Python)在非终端输出时会启用块缓冲,不是每行立刻写盘,而是积攒到一定大小才写。
nohup python -u app.py > app.log 2>&1 &
-u:强制无缓冲输出
或:
stdbuf -oL -eL python app.py > app.log 2>&1 &
nohup python app.py & > app.log
✅ 这里 > app.log 只对当前 shell 生效,对 nohup 进程无效
nohup python app.py > app.log 2>&1 &
或(更清晰):
nohup python app.py \
> app.log \
2>&1 \
&
确认方式:
ls -l app.log
cat app.log
如果文件大小为 0:
如果你这样写:
nohup python app.py &
默认输出在:
nohup.out
如果你又自己 > app.log,但程序内部写的是 stderr 或父进程输出,就可能“找不到日志”。
✅ 统一重定向最安全
例如:
检查:
jobs
ps aux | grep app.py
如果进程不在了,看:
cat nohup.out
df -h
ls -ld .
touch test.log
nohup ./your_program > run.log 2>&1 &
disown
或更好(systemd 才是正道):
systemctl --user start myapp
> log 2>&1 &-u)如果你愿意,可以把具体命令 + 程序语言发出来,我可以直接帮你定位。