在 Linux 中使用 nohup 时,日志“丢失”通常不是真的被删除了,而是写到了你没注意的地方,或者进程根本没正常写日志。下面按常见原因逐一说明,并给出排查办法。
nohup.out 不在你以为的目录nohup python app.py &
你以为日志在:
~/nohup.out
但实际上可能在:
/your/start/dir/nohup.out
nohup.out 默认生成在“执行 nohup 时的当前目录”find / -name nohup.out 2>/dev/null
或:
lsof -p <pid> | grep nohup
常见写法:
nohup python app.py > out.log 2>&1 &
此时:
out.log如果路径是相对路径:
nohup ./start.sh > log.txt &
那 log.txt 也在启动目录
✅ 建议写法(明确路径):
nohup python app.py > /var/log/app.log 2>&1 &
print(),但:
nohup python app.py &
可能几个小时都不写一行
✅ 解决:
nohup python -u app.py > app.log 2>&1 &
或:
print("log", flush=True)
例如:
ps aux | grep app.py
dmesg | tail
journalctl -xe
nohup xxx &
nohup xxx &
第二次可能:
rm nohup.out
此时:
✅ 修复:
ls -l /proc/<pid>/fd
找到被删文件,copy 回来
* * * * * nohup /home/user/app.sh
$HOME✅ 正确写法:
* * * * * /home/user/app.sh >> /home/user/app.log 2>&1
df -h
touch nohup.out
✅ 明确路径 + 不缓冲 + 后台
nohup python -u app.py > /data/logs/app.log 2>&1 &
✅ 生产环境更推荐
systemdsupervisortmux / screennohup 日志“丢失”,99% 是因为: 日志写到了别的地方,或程序没真正输出
如果你愿意,可以把你的:
贴出来,我可以帮你精确定位。