在 CentOS(以及绝大多数 Linux 发行版)上,用 nohup 启动程序后“日志丢失”通常不是 nohup 本身把日志删了,而是使用方式或运行环境导致输出没写到你以为的地方。下面按最常见原因逐一说明。
nohup 默认只保证 stdout 不被挂断信号影响,并且:
nohup command
默认会:
nohup.out⚠️ 很多程序重要日志都打到 stderr(如 Java、Python 异常、systemd 服务)。
nohup.out 里没内容nohup command > app.log 2>&1 &
或分开:
nohup command > out.log 2> err.log &
常见写法:
nohup python app.py > log.txt &
此时:
nohup.out 不会生成log.txt如果你后来去找 nohup.out,自然“找不到”。
例如:
结果:
nohup 启动了ps -ef | grep 程序名
tail -f 日志文件
nohup.out 或相对路径日志会写在 当前 shell 的工作目录。
例如:
cd /tmp
nohup /opt/app/run.sh &
日志在 /tmp,不在 /opt/app
✅ 建议用绝对路径:
nohup /opt/app/run.sh > /var/log/app.log 2>&1 &
现象:
检查:
df -h
df -i
ls -l 日志目录
systemd 服务里用 nohup(不推荐)结果:
✅ 正确方式:
systemddocker logs有些程序:
kill -9 强制结束导致:
✅ 可加:
python -u app.py
或
stdbuf -oL nohup command
nohup /path/to/app \
> /var/log/app/app.log \
2>&1 \
&
并配合:
tail -f /var/log/app/app.log
如果你愿意,可以把你的启动命令 + 日志现象贴出来,我可以直接帮你定位是哪一种原因。