在 Linux 下使用 nohup 时,日志不输出是一个很常见的问题,通常不是 nohup 本身“没写日志”,而是输出被重定向、缓冲或写错地方了。下面按常见原因逐个说明。
nohup python app.py > app.log &
如果程序是报错退出或打印到 stderr,你不会在 app.log 看到内容。
✅ 正确写法:
nohup python app.py > app.log 2>&1 &
或:
nohup python app.py > app.log 2> err.log &
当不是终端时,很多程序会启用块缓冲:
nohup python app.py > app.log &
可能几小时都没内容。
✅ 解决方式:
方法 1:关闭缓冲(推荐)
nohup python -u app.py > app.log 2>&1 &
方法 2:用 stdbuf
nohup stdbuf -oL python app.py > app.log 2>&1 &
nohup ./app &
日志应在:
./nohup.out
但如果:
cd 到别的目录就“找不到日志”。
✅ 建议始终显式重定向:
nohup ./app > /var/log/app.log 2>&1 &
ps -ef | grep app
或:
jobs -l
如果进程不在了,看:
cat nohup.out
cat app.log
可能只有启动失败信息。
例如:
nohup sh run.sh &
但 run.sh 里没处理输出。
✅ 正确:
nohup sh run.sh > run.log 2>&1 &
StandardOutput=filenohup your_command > app.log 2>&1 &
或带无缓冲:
nohup stdbuf -oL your_command > app.log 2>&1 &
如果你愿意,可以把:
贴出来,我可以直接帮你定位是哪一条原因。