在 Debian(以及大多数 Linux 发行版)上,使用 nohup 时日志“丢失”通常不是真的被删除了,而是输出没有写到你以为的地方,或者进程根本没按预期运行。下面按常见原因逐一说明。
nohup 默认只重定向 stdoutnohup ./app.sh &
你以为日志会都在 nohup.out,但“看不到日志”。
nohup 默认只重定向 stdout(标准输出)显式重定向 stdout + stderr:
nohup ./app.sh > app.log 2>&1 &
或:
nohup ./app.sh >> app.log 2>&1 &
✅ 这是日志“丢失”的第一大原因
nohup.out 是空的很多程序(Java / Python / Node / Go):
ls -l /proc/<pid>/fd
看程序实际往哪个 fd 写。
nohup python app.py &
找不到 nohup.out
nohup.out 写在当前工作目录systemd、cron、或 su 下运行,目录可能是 / 或 /rootnohup ./app.sh > /var/log/app.log 2>&1 &
df -h
touch test.log
ps 看不到进程nohup ./app.sh > app.log 2>&1 &
echo $?
ps aux | grep app
nohup 的意义是:
忽略 SIGHUP,终端关闭也不退出
但如果:
kill -9 杀父 shell日志仍可能不完整。
setsidsetsid ./app.sh > app.log 2>&1 < /dev/null &
disown./app.sh > app.log 2>&1 &
disown
[Service]
ExecStart=/path/app
StandardOutput=append:/var/log/app.log
StandardError=append:/var/log/app.err
2>&1nohup.out 但目录不对如果你愿意,可以贴出:
nohup 命令我可以帮你精确分析“日志去哪了”。