在 Debian(以及大多数 Linux 发行版)上,nohup 日志“丢失”通常不是 nohup 本身的问题,而是使用方式或环境差异导致的。下面按常见原因逐一说明。
nohup ./app &
默认日志会写到:
nohup.out
但前提是:
如果你:
cd /some/other/path
cat nohup.out # 空的或不存在
就会“看起来日志丢了”。
✅ 正确做法:
nohup ./app > /var/log/app.log 2>&1 &
很多程序(Java / Python / Go / 服务类):
nohup 只能接管它启动时的 stdout/stderr,程序内部不输出,nohup.out 就是空的。
✅ 检查:
lsof -p <pid> | grep -E 'stdout|stderr'
Ctrl + C 或 exit 前进程被杀死如果你:
nohup app &
exit
但:
screen / tmux 异常断开某些环境仍可能影响子进程。
✅ 更稳妥:
setsid ./app > app.log 2>&1 &
或:
disown
在 Debian + systemd 的服务器上:
如果你用:
systemctl restart ssh
或会话被回收,nohup.out 可能:
✅ 推荐:
journalctl -u your-service
或直接写 systemd service。
nohup 会尝试写 nohup.out,失败就:
$HOME/nohup.out✅ 检查:
ls -l nohup.out
whoami
pwd
尤其是:
python -u 才不缓冲)printf 没 \n程序还在跑,但日志“没出来”。
✅ 解决:
python -u app.py > app.log 2>&1 &
或程序里 fflush()。
常见位置:
./nohup.out
~/nohup.out
/var/log/
/tmp/
✅ 搜索:
find / -name nohup.out 2>/dev/null
| 原因 | 说明 |
|---|---|
| 当前目录不对 | nohup.out 在别处 |
| 程序不输出 | nohup 无能为力 |
| 被缓冲 | 看起来没日志 |
| systemd 环境 | 日志不在 nohup.out |
| 权限问题 | 写不进去 |
| 进程被回收 | nohup 没真正脱离 |
如果你愿意,可以告诉我:
我可以帮你精确定位日志去哪了。